【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 }

 

你可能感兴趣的:(计划)