我的博客

codevs 2639 约会计划

目录
  1. AC代码

题目描述 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

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
#include <map>
using namespace std;

map<string, string> fa;

string getfa(string x) {
if (fa[x]==x) return x;
return fa[x] = getfa(fa[x]);
}

void merge(string x, string y) {
if (getfa(x) != getfa(y))
fa[fa[y]] = fa[x];
}


int main() {
int n, m, p;
string m1, m2;
cin >> n >> m >> p;
for (int i = 1; i <= n; i++) {
cin >> m1;
fa[m1] = m1;
}
for (int i = 0; i < m; i++) {
cin >> m1 >> m2;
merge(m1, m2);
}
for (int i = 0; i < p; i++) {
cin >> m1 >> m2;
if (getfa(m1) != getfa(m2))
cout<<"cc cry\n";
else
cout<<"safe\n";
}
}

一个我不知道为什么会 wa 的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <string>
#include <map>
using namespace std;

map<string, string> fa;

string getfa(string x) {
if (fa[x]==x) return x;
return fa[x] = getfa(fa[x]);
}

void merge(string x, string y) {
if (getfa(x) != getfa(y))
fa[fa[y]] = fa[x];
}


int main() {
int n, m, p;
cin >> n >> m >> p;
for (int i = 1; i <= n; i++) {
string m1;
cin >> m1;
fa[m1] = m1;
}
for (int i = 0; i < m; i++) {
string m1, m2;
cin >> m1 >> m2;
merge(m1, m2);
}
for (int i = 0; i < p; i++) {
string m1, m2;
cin >> m1 >> m2;
if (getfa(m1) != getfa(m2))
cout<<"cc cry\n";
else
cout<<"safe\n";
}
}

评论无需登录,可以匿名,欢迎评论!