【rqnoj378】 约会计划
题目描述
cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错。然而,最关键的是,cc能够很好的调解各各妹妹间的关系。mm之间的关系及其复杂,cc必须严格掌握她们之间的朋友关系,好一起约她们出去,cc要是和不是朋友的两个mm出去玩,后果不堪设想……
cc只掌握着一些mm之间的关系,但是cc比较聪明,他知道a和b是朋友,b和c 是朋友,那么a和c也是朋友。
下面给出m对朋友关系, cc 定了p次约会,每次约会找两个mm,如果这两个mm是朋友,那么不会出乱子,输出‘safe’,要是不是朋友,那么cc必然会挨……,输出‘cc cry’(T_T)。
【数据范围】
0<m<=2008
0<p<=2008
输入格式第一行为n,m,p。n为mm的数量,cc知道m对朋友关系,有p次约会。
2到n+1 行,每行一个字符串,为第i个mm的名字。{字符串长度<=11,且全大写}
以下m行,每行两个字符串,用空格隔开 ,为有朋友关系的两个mm的名字。
以下p行,每行为两个字符串,用空格隔开,为这p次约会中两个mm的名字。
{保证数据不会出现没有出现过的名字}
输出格式输出P行表示第i次约会的情况,输出‘safe’或者‘cc cry’
样例输入
3 1 1
AAA
BBB
CCC
AAA CCC
AAA BBB
样例输出
cc cry
题解
并查集模板了。。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<math.h> 6 #include<map> 7 #define inf 10000000 8 using namespace std; 9 map<string,int>ms; 10 int parent[2010]; 11 int yxc(int x) 12 { 13 if(x!=parent[x]) parent[x]=yxc(parent[x]); 14 else return x; 15 } 16 void add(int x,int y) 17 { 18 int i,j; 19 i=yxc(x); 20 j=yxc(y); 21 if(i!=j) 22 parent[i]=j; 23 } 24 int main() 25 { 26 int n,m,p; 27 string a; 28 string b; 29 scanf("%d%d%d",&n,&m,&p); 30 for(int i=1; i<=n; i++) 31 { 32 cin>>a; 33 ms[a]=i; 34 parent[i]=i; 35 } 36 for(int i=1; i<=m; i++) 37 { 38 cin>>a>>b; 39 add(ms[a],ms[b]); 40 } 41 for(int i=1; i<=p; i++) 42 { 43 cin>>a>>b; 44 int x=ms[a]; 45 int y=ms[b]; 46 // printf("%d %d\n",x,y); 47 if(yxc(x)==yxc(y)) 48 { 49 printf("safe\n"); 50 } 51 else printf("cc cry\n"); 52 53 } 54 return 0; 55 }