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