BZOJ2079: [Poi2010]Guilds
【传送门:BZOJ2079】
简要题意:
给出一个无向图,每个点可以成为两种状态,也可以保持原状
求是否能使得每个点都与两个状态相邻(包括自身)
题解:
直接搞,实际上就是找无边相连的点
因为如果一个连通块的大小为1,显然不可能使得每个点都与两个状态相邻
然后,其他的连通块,只需要找出它的任意一棵生成树(肯定是二分图),所以直接黑白染色就可以了
所以只要找孤立点就可以了
参考代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> using namespace std; bool v[210000]; int main() { int n,m; scanf("%d%d",&n,&m); memset(v,false,sizeof(v)); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); if(x!=y) v[x]=v[y]=true; } for(int i=1;i<=n;i++) if(v[i]==false){printf("NIE\n");return 0;} printf("TAK\n"); return 0; }
渺渺时空,茫茫人海,与君相遇,幸甚幸甚