讨论 / 通过了两个测试点,木有理由出错啊
kuki 2012-02-08 01:21:00
点我顶贴 收藏 删除
#include<stdio.h>

#include<iostream.h>

#include<string.h>

char m[20090][20];

int f[20090];

int num[20090];

int N,M,P;

void makeset()

{

int i;

for(i=1;i<=N;i++)

{

f[i]=i;

num[i]=1;

}

}

int findset(int x)

{

if(x!=f[x])

{

x=findset(f[x]);

}

return x;

}

void unionset(int p1,int p2)

{

int x=findset(p1);

int y=findset(p2);

if(x==y)

return;

else if(num[x]>=num[y])

{

f[y]=x;

num[x]+=num[y];

}

else

{

f[x]=y;

num[y]+=num[x];

}

}

int main()

{

// freopen("in.txt","r",stdin);

int i;

char a[12],b[12],c[12],d[12];

scanf("%d%d%d",&N,&M,&P);

makeset();

for(i=1;i<=N;i++)

{

scanf("%s",m[i]);

}

for(i=1;i<=M;i++)

{

scanf("%s%s",a,b);

int k1=-1,k2=-1;

for(int j=1;j<=N;j++)

{

if(strcmp(a,m[j])==0)

k1=j;

if(strcmp(b,m[j])==0)

k2=j;

if(k1!=-1&&k2!=-1)

break;

}

unionset(k1,k2);

}

f;

for(i=1;i<=P;i++)

{

int k3=-1,k4=-1;

scanf("%s%s",c,d);

for(int j=1;j<=N;j++)

{

if(strcmp(c,m[j])==0)

k3=j;

if(strcmp(d,m[j])==0)

k4=j;

if(k3!=-1&&k4!=-1)

break;

}

f;

if(findset(k3)==findset(k4))

printf("safe\n");

else

printf("cc cry\n");

}

return 0;

}

#1 骚王竞走哥@2011-11-09 20:38:00
回复 删除
我也是.我不理解
#2 644744594@2012-02-08 01:21:00
回复 删除
我写的和你一样,我超级不理解,同病相怜
查看更多回复
提交回复