閱讀502 返回首頁    go 阿裏雲 go 技術社區[雲棲]


cf 167.div2 E.Dima and Horses

    題意很簡單,就是分組,讓衝突最多有一種,因為隻要分成2組,就是個2-SAT

    但是最多隻有3個不和,就是不和的三個裏至少有2個在一組,所以應該必然有解(這邊不太明白,感覺這樣),直接染色就可以了


/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#define INF 1E9
using namespace std;
int en[300010][3];
int d[300010];
bool ok[300010];
bool sat(int v)
{
    int i,now=0,u;
    for(i=0;i<d[v];i++)
    {
        u=en[v][i];
        if(ok[u]==ok[v])now++;
    }
    if(now>1)
    {
        ok[v]=!ok[v];
        for(i=0;i<d[v];i++)
        {
            u=en[v][i];
            if(ok[v]==ok[u])sat(u);
        }
    }
}
int main()
{
    int n,m,i,a,b;
    scanf("%d%d",&n,&m);
    memset(d,0,sizeof(d));
    memset(ok,0,sizeof(ok));
    for(i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        en[a][d[a]++]=b;
        en[b][d[b]++]=a;
    }
    for(i=1;i<=n;i++)
      sat(i);
    for(i=1;i<=n;i++)
      printf("%d",ok[i]);
    puts("");
}


最後更新:2017-04-04 07:03:49

  上一篇:go unix編程好記提示
  下一篇:go hadoop支持的數據類型