分析:
其实大概画个图就会明白一个有环的联通块肯定可以完成…然后并查集维护就好了…
代码如下:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;
const int maxn=100000+5;
int n,m,fa[maxn],have[maxn];
inline int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
signed main(void){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
fa[i]=i,have[i]=0;
for(int i=1,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
int fx=find(x),fy=find(y);
if(fx==fy)
have[fx]=1;
else
have[fy]|=have[fx],fa[fx]=fy;
}
for(int i=1;i<=n;i++)
if(!have[find(i)]){
puts("NIE");
return 0;
}
puts("TAK");
return 0;
}
by >_< NeighThorn