HDU3172---Virtual Friends

来源:互联网 发布:java 加载资源文件 编辑:程序博客网 时间:2024/05/19 23:55

唯一坑点:

while(scanf("%d",&t)!=EOF)

感谢DISCUSS大神

#include<cmath>#include<cstdio>#include<cstring>#include<map>#include<iostream>#include<algorithm>using namespace std;#define MAX 100010map<string,int>mp;int n,m,pre[MAX],sum[MAX];void init(){    for(int i=1;i<MAX;i++)        pre[i]=i,sum[i]=1;}int find(int x){    int r=x;    while(r!=pre[r])        r=pre[r];    int i=x,j;    while(pre[i]!=r)    {        j=pre[i];        pre[i]=r;;        i=j;    }    return r;}int uni(int a,int b){    int dx=find(a);    int dy=find(b);    if(dx!=dy)    {        pre[dx]=dy;        sum[dy]+=sum[dx];    }    return sum[dy];}int main(){   int t;    while(scanf("%d",&t)!=EOF){    while(t--){    mp.clear();    scanf("%d",&n);        init();        int num=1;        char a[25],b[25];        while(n--)        {   int u,v;            scanf("%s%s",&a,&b);            if(mp[a]==0) mp[a]=num++;            if(mp[b]==0) mp[b]=num++;            u=mp[a];            v=mp[b];           int k= uni(u,v);            printf("%d\n",k);        }    }    }return 0;}



0 0
原创粉丝点击