#include<iostream> #include<cstdio> using namespace std; #define MAXNUM 10001 int SetType[MAXNUM]; void InitialSet(int S[], int N); void LinkComputer(int S[], int N); void Islink(int S[], int N); void TheNumLink(int S[], int N); int Find(int S[], int num); int main() { int N; char str; cin >> N; InitialSet(SetType, N); //初始化数组; do { cin >> str; switch (str) { case 'I': LinkComputer(SetType, N); break; case 'C': Islink(SetType, N); break; case 'S': TheNumLink(SetType, N); break; } } while (str != 'S'); return 0; } void InitialSet(int S[], int N) { for (int i = 0; i < N; i++) { S[i] = -1; } return; } void LinkComputer(int S[], int N) { int num1, num2; cin >> num1 >> num2; int root1 = Find(S, num1 - 1); int root2 = Find(S, num2 - 1); if (root1 != root2) { if (S[root1] < S[root2]) { S[root1] += S[root2]; S[root2] = root1; } else { S[root2] += S[root1]; S[root1] = root2; } } return; } void Islink(int S[], int N) { int num1, num2; cin >> num1 >> num2; int root1 = Find(S, num1 - 1); int root2 = Find(S, num2 - 1); if (root1 == root2) cout << "yes" << endl; else cout << "no" << endl; return; } void TheNumLink(int S[], int N) { int counter = 0; for (int i = 0; i < N; i++) { if (S[i] < 0) counter++; } if (counter == 1) cout << "The network is connected." << endl; else cout << "There are " << counter << " components." << endl; } int Find(int S[], int num) { if (S[num] < 0) { return num; } else { return S[num] = Find(S, S[num]); } }