约会(并查集)

这篇博客探讨了如何使用C++编程语言实现并查集数据结构,并结合实例展示了其在解决‘约会’问题中的应用。
题目描述
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的名字。

{保证数据不会出现没有出现过的名字}

输出
第一行为n,m,p。n为mm的数量,cc知道m对朋友关系,有p次约会。

2到n+1 行,每行一个字符串,为第i个mm的名字。{字符串长度<=11,且全大写}

以下m行,每行两个字符串,用空格隔开 ,为有朋友关系的两个mm的名字。

以下p行,每行为两个字符串,用空格隔开,为这p次约会中两个mm的名字。

{保证数据不会出现没有出现过的名字}

样例输入
3 1 1
AAA
BBB
CCC
AAA CCC

AAA BBB

样例输出

cc cry

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
map<string, string > mm;
string FindFather(string str)
{
	if(mm[str] == str)
		return str;
	else
		return FindFather(mm[str]);
}
int main()
{
	int n, m, p;
	cin>>n>>m>>p;
	char str1[22], str2[22];
	for(int i = 0; i < n; i++)
	{
		//scanf(" %s", str1);
		cin>>str1;
		mm[str1] = str1;
	}
	for(int i = 0; i < m; i++)
	{
		cin>>str1>>str2;
		if(FindFather(str1) != FindFather(str2))
			mm[FindFather(str1)] = FindFather(str2);
	}
	for(int i = 0; i < p; i++)
	{
		cin>>str1>>str2;
		if(FindFather(str1) == FindFather(str2))
			cout<<"safe"<<endl;
		else
			cout<<"cc cry"<<endl;
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值