codevs 2639 约会计划
Posted 惑&葬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 2639 约会计划相关的知识,希望对你有一定的参考价值。
题目描述 Description
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‘
输入描述 Input Description
第一行为n,m,p。n为mm的数量,cc知道m对朋友关系,有p次约会。
2到n+1 行,每行一个字符串,为第i个mm的名字。{字符串长度<=11,且全大写}
以下m行,每行两个字符串,用空格隔开 ,为有朋友关系的两个mm的名字。
以下p行,每行为两个字符串,用空格隔开,为这p次约会中两个mm的名字。
{保证数据不会出现没有出现过的名字}
输出描述 Output Description
输出P行表示第i次约会的情况,输出‘safe‘或者‘cc cry‘
样例输入 Sample Input
3 1 1
AAA
BBB
CCC
AAA CCC
AAA BBB
样例输出 Sample Output
cc cry
数据范围及提示 Data Size & Hint
0<m<=2008
0<p<=2008
思路:
map+并查集。
代码:
#include<cstdio> #include<map> #include<string> #include<iostream> using namespace std; map<string,int>a; string s,ss; int n,m,p,fa[2001]; int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } int main() { int i,j; scanf("%d%d%d",&n,&m,&p); for(i=1;i<=n;i++) fa[i]=i,cin>>s,a[s]=i; for(i=1;i<=m;i++) { cin>>s>>ss; int xx=find(a[s]),yy=find(a[ss]); if(fa[xx]!=fa[yy]) fa[xx]=fa[yy]; } for(i=1;i<=p;i++) { cin>>s>>ss; if(find(a[s])==find(a[ss])) printf("safe\n"); else printf("cc cry\n"); } return 0; }
以上是关于codevs 2639 约会计划的主要内容,如果未能解决你的问题,请参考以下文章