War - UVa 10158 并查集

来源:互联网 发布:海岛奇兵潜艇升级数据 编辑:程序博客网 时间:2024/05/21 17:01

题意:朋友的朋友是朋友,朋友的敌人是敌人,敌人的敌人是朋友。

思路:并查集模拟。

AC代码如下:

#include<cstdio>#include<cstring>using namespace std;int n,p[10010],en[10010];int find(int x){    return p[x]==x ? x :p[x]=find(p[x]);}int main(){    int i,j,k,u,v,u2,v2;    scanf("%d",&n);    for(i=1;i<=n;i++)       p[i]=i;    while(~scanf("%d%d%d",&k,&u,&v) && k>0)    {        u++;v++;        u=find(u);        v=find(v);        if(k==1)        {            if(en[u]==v)              printf("-1\n");            else            {                p[v]=u;                u2=find(en[u]);                v2=find(en[v]);                if(u2>0 && v2>0)                  p[v2]=u2;                else if(v2>0)                  u2=v2;                en[u]=u2;                en[u2]=u;            }        }        else if(k==2)        {            if(u==v)              printf("-1\n");            else if(en[u]!=v)            {                if(en[u]>0)                {                    u2=find(en[u]);                    p[u2]=v;                }                if(en[v]>0)                {                    v2=find(en[v]);                    p[v2]=u;                }                en[u]=v;                en[v]=u;            }        }        else if(k==3)        {            if(u==v)              printf("1\n");            else              printf("0\n");        }        else if(k==4)        {            if(en[u]==v)              printf("1\n");            else              printf("0\n");        }    }}


0 0