[kuangbin带你飞]专题五 并查集 N POJ 1308

来源:互联网 发布:wps数据怎么更改有效性 编辑:程序博客网 时间:2024/05/16 01:57

题目地址:https://vjudge.net/contest/66964#problem/N

思路:和M题就是一模一样的题你敢信、、、

AC代码:

#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;const int maxn=100000+10;int fa[maxn];int find(int p){    if(p!=fa[p])        fa[p]=find(fa[p]);    return fa[p];}int main(){    int a,b;    int sum=0;    int sum2=0;    for(int i=0;i<maxn;i++)        fa[i]=i;    map<int,int>m;    int flag=0;    int casei=1;    while(scanf("%d%d",&a,&b) && (a!=-1 && b!=-1))    {        if(a==0 && b==0)        {            //printf("%d %d\n",sum,sum2);            if((sum==sum2-1 || (sum==0 && sum2==0)) && !flag)                printf("Case %d is a tree.\n",casei++);            else                printf("Case %d is not a tree.\n",casei++);            sum=0,sum2=0;            m.clear();            for(int i=0;i<maxn;i++)            fa[i]=i;            flag=0;            continue;        }        sum++;        if(!m.count(a))        {            m[a]=1;            sum2++;        }        if(!m.count(b))        {            m[b]=1;            sum2++;        }        int pa=find(a),pb=find(b);        if(pa==pb)        {            flag=1;        }        else        {            fa[a]=b;        }    }}


0 0
原创粉丝点击