您的位置:首页 > Web前端

04-树5. File Transfer (25)

2015-08-21 14:21 423 查看
题目地址:http://www.patest.cn/contests/mooc-ds/04-%E6%A0%915

/*
并查集 和 set<>
*/
#include <cstdio>
#include <sstream>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <cmath>
#include <set>
#include <stack>

using namespace std;

#define  N 10001

int n;

int father
;
int find(int x)
{
if (x == father[x])
return x;
return father[x] = find(father[x]);
}
void merge(int x ,int y)
{
father[find(y)] = find(x);
}

int main()
{
//freopen("in", "r", stdin);
scanf("%d\n", &n);
char c ='C';
int tmp1, tmp2;
int i;
for (i = 1; i <= n; i++)
{
father[i] = i;
}
while (c != 'S')
{
scanf("%c", &c);
if (c == 'I')
{
scanf("%d%d\n", &tmp1, &tmp2);
if (find(tmp1) != find(tmp2))
merge(tmp1, tmp2);
}
else if (c == 'C')
{
scanf("%d%d\n", &tmp1, &tmp2);
if (find(tmp1) != find(tmp2))
{
printf("no");
}
else{
printf("yes");
}
printf("\n");
}
else {
break;
}
}

set<int> sset;

for (i = 1; i <= n; i++)
{
sset.insert(find(i));
}
int len = sset.size();
if (len == 1)
{
printf("The network is connected.\n");
}
else{
printf("There are %d components.\n",len);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: