• HDU5971【瞎搞】


    题意:略(忙着准备文化课。。。明天期中考啊。。。。

    思路:

    正解就是染色,2-sat搞;


    AC代码(虽然是错误的。。。数据水(过踏马的也行啊,起码打脸他啊!)

    4 3 1 0

    1 2

    2 3

    3 4

    4

    这个就挂了;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAX=1010;
    const double q=(1+sqrt(5.0))/2.0;
    const double eps=1e-100;
    int n,m;
    int v[MAX];
    int a[MAX][MAX];
    int main()
    {
        int t,i,j;
        int x,y;
    	while(~scanf("%d%d%d%d",&n,&m,&x,&y))
    	{
    	    int flag=0;
            int b,c;
            memset(a,0,sizeof(a));
    	    memset(v,-1,sizeof(v));
    	    for(i=0;i<m;i++)
            {
                scanf("%d%d",&b,&c);
                a[b][c]=a[c][b]=1;
            }
            for(i=1;i<=x;i++)
            {
                scanf("%d",&b);
                for(j=0;j<n;j++)
                {
                    if(a[b][j])
                    {
                        if(v[j]==1)
                            flag=1;
                        v[j]=0;
                    }
                }
                v[b]=1;
            }
            for(i=1;i<=y;i++)
            {
                scanf("%d",&b);
                for(j=0;j<n;j++)
                {
                    if(a[b][j])
                    {
                       if(v[j]==0)
                            flag=1;
                        v[j]=1;
                    }
                }
                v[b]=0;
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(a[i][j])
                    {
                        if(v[i]==-1&&v[j]==-1)
                        {
                            v[i]=1;
                            v[j]=0;
                        }
                        else if(v[i]!=-1&&v[j]!=-1)
                        {
                            if(v[i]+v[j]!=1)
                                flag=1;
                        }
                        else if(v[i]!=-1)
                        {
                            v[j]=1-v[i];
                        }
                        else
                            v[i]=1-v[j];
                    }
                }
            }
            for(i=1;i<=n;i++)
            {
    //            printf("%d ",v[i]);
                if(v[i]==-1)
                    flag=1;
            }
    //        puts("");
            if(flag)
                printf("NO
    ");
            else
                printf("YES
    ");
        }
        return 0;
    }
    

    贴份应该正确的(escape

    #include<bits/stdc++.h>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=5*1e4+1000;
    #define eps 1e-4
    int co[10005];
    int vis[10005];
    vector<int>g[10005];
    int dfs(int u)
    {
        int sz=g[u].size();
        for(int i=0; i<sz; i++)
        {
            int v=g[u][i];
            if(!co[v])
            {
                co[v]=!co[u];
                if(!dfs(v))
                    return 0;
            }
            else if(co[u]==co[v])
            {
                return 0;
            }
        }
        return 1;
    }
    int main()
    {
        int n,m,x,y;
        while(cin>>n>>m>>x>>y)
        {
            for(int i=0; i<10005; i++)
                g[i].clear();
            if(n==1)
            {
                puts("NO");
                continue;
            }
            for(int i=0; i<m; i++)
            {
                int xx,yy;
                scanf("%d%d",&xx,&yy);
                g[xx].push_back(yy);
            }
            memset(co,0,sizeof(co));
            for(int i=0; i<x; i++)
            {
                int xx;
                scanf("%d",&xx);
                co[xx]=1;
    //            int sz=g[xx].size();
    //            for(int i=0; i<sz; i++)
    //            {
    //                int v=g[xx][i];
    //                co[v]=!co[xx];
    //            }
            }
            for(int i=0; i<y; i++)
            {
                int xx;
                scanf("%d",&xx);
                co[xx]=0;
    //            int sz=g[xx].size();
    //            for(int i=0; i<sz; i++)
    //            {
    //                int v=g[xx][i];
    //                co[v]=!co[xx];
    //            }
            }
            if(x==0&&y==0)
                  puts("NO");
            else
            {
                int flag=1;
                for(int i=1; i<=n; i++)
                    if(!dfs(i))
                        flag=0;
                if(flag)
                    puts("YES");
                else
                    puts("NO");
            }
        }
        return 0;
    }

    加强后的瞎搞(求hack

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAX=1010;
    const double q=(1+sqrt(5.0))/2.0;
    const double eps=1e-100;
    int n,m;
    int v[MAX];
    int a[MAX][MAX];
    int main()
    {
        int t,i,j,k;
        int x,y;
        while(~scanf("%d%d%d%d",&n,&m,&x,&y))
        {
            int flag=0;
            int b,c;
            memset(a,0,sizeof(a));
            memset(v,-1,sizeof(v));
            for(i=0; i<m; i++)
            {
                scanf("%d%d",&b,&c);
                a[b][c]=a[c][b]=1;
            }
            for(i=1; i<=x; i++)
            {
                scanf("%d",&b);
                for(j=0; j<n; j++)
                {
                    if(a[b][j])
                    {
                        if(v[j]==1)
                            flag=1;
                        v[j]=0;
                    }
                }
                v[b]=1;
            }
            for(i=1; i<=y; i++)
            {
                scanf("%d",&b);
                for(j=0; j<n; j++)
                {
                    if(a[b][j])
                    {
                        if(v[j]==0)
                            flag=1;
                        v[j]=1;
                    }
                }
                v[b]=0;
            }
            for(k=0; k<2; k++)
            {
                for(i=1; i<=n; i++)
                {
                    for(j=1; j<=n; j++)
                    {
                        if(a[i][j])
                        {
                            if(v[i]==-1&&v[j]==-1&&k)
                            {
                                v[i]=1;
                                v[j]=0;
                            }
                            else if(v[i]!=-1&&v[j]!=-1)
                            {
                                if(v[i]+v[j]!=1)
                                    flag=1;
                            }
                            else if(v[i]!=-1)
                            {
                                v[j]=1-v[i];
                            }
                            else if(v[j]!=-1)
                                v[i]=1-v[j];
                        }
                    }
                }
            }
            for(i=1; i<=n; i++)
            {
    //            printf("%d ",v[i]);
                if(v[i]==-1)
                    flag=1;
            }
    //        puts("");
            if(flag)
                printf("NO
    ");
            else
                printf("YES
    ");
        }
        return 0;
    }
    /*
    6 5 0 0
    1 2
    2 3
    3 4
    3 1
    5 6
    
    6 5 0 0
    1 2
    2 3
    3 4
    4 1
    5 6
    
    4 3 1 0
    1 2
    2 3
    3 4
    4
    
    
    */
    



  • 相关阅读:
    InSAR 大气校正数据 GACOS
    java通用的方法整理
    Jquery实现select左右栏的添加移除
    kendo ui之grid列表
    kendo-ui学习笔记(一)
    kendo-ui学习笔记——题记
    chrome driver驱动地址
    适合引入缓存的业务及影响
    个人测试方法论202108
    Redis缓存
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6216749.html
Copyright © 2020-2023  润新知