HDU3172 Virtual Friends

来源:互联网 发布:哇嘎超级节点连接网络 编辑:程序博客网 时间:2024/05/29 14:31

纯裸的并查集 

#include<stdio.h>#include<algorithm>#include<iostream>#include<map>#include<string>using namespace std;#define M 200005int f[M];int find(int x){return f[x]<0?x:f[x]=find(f[x]);}int uni(int fx,int fy){    int ans=f[fx]+f[fy];    if(f[fx]<f[fy])    {        f[fy]=ans;        f[fx]=fy;    }    else    {        f[fx]=ans;        f[fy]=fx;    }    return ans;}int main(){    int t;    while(scanf("%d",&t)!=EOF)    {     while(t--)      {        int co=0;        map<string,int>df;        char s1[100],s2[100];        int n;        scanf("%d",&n);        for(int i=0;i<n;++i)        {            int fa,fb;            scanf("%s%s",s1,s2);            if(!df[s1]){f[++co]=-1;fa=co;df[s1]=co;}            else fa=find(df[s1]);            if(!df[s2]){f[++co]=-1;fb=co;df[s2]=co;}            else fb=find(df[s2]);//printf("%d %d\n",fa,fb);            if(fa==fb)printf("%d\n",-f[fa]);            else                printf("%d\n",-uni(fa,fb));        }              }    }}


0 0