bzoj1116 [POI2008]CLO(记录带环连通块)

来源:互联网 发布:移动刷流量软件 编辑:程序博客网 时间:2024/06/05 21:59

基本同bzoj1854 还是如果一个块内有环,则这一个块内都可以满足,否则必定有一个点不满足。(这题题意有毒,读了半天才明白 是你可以把一些边变成单向边,其他的可以删去。)

#include<cstdio>#include<cstring>int const N=100010;int n,m,fa[N];bool v[N];int find(int x){    return fa[x]==x?x:fa[x]=find(fa[x]);}void merge(int xx,int yy){    if(v[xx]||v[yy]) v[xx]=1,v[yy]=1;    fa[xx]=yy;v[xx]=1;}int main(){    memset(v,0,sizeof(v));    scanf("%d%d",&n,&m);    for(int i=1;i<=n;++i) fa[i]=i;    while(m--){        int x,y;        scanf("%d%d",&x,&y);        int xx=find(x),yy=find(y);        if(xx==yy) v[xx]=1;        else merge(xx,yy);    }    for(int i=1;i<=n;++i) if(!v[i]){        puts("NIE");return 0;    }    puts("TAK");    return 0;}