题目
思路
并查集,简单
代码
#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
#define MAXX 10100
using namespace std;
int N;
int fa[MAXX];
int find(int x)
{
if (fa[x] == x)
return x;
fa[x] = find(fa[x]);
return fa[x];
}
void merge(int x,int y)
{
int fx = find(x);
int fy = find(y);
if (fx == fy)
return;
else
fa[fy] = fx;
}
int main()
{
cin>>N;
for (int i = 1; i <= N; ++i)
{
fa[i] = i;
}
char ch;
while (cin>>ch)
{
if (ch == 'S')
break;
int x,y;
cin>>x>>y;
if (ch == 'C')
{
if (find(x)==find(y))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
else
{
merge(x,y);
}
}
int cnt = 0;
for (int i = 1; i <= N; ++i)
{
if (fa[i] == i)
cnt++;
}
if (cnt ==1)
cout<<"The network is connected.";
else
printf("There are %d components.",cnt);
return 0;
}