01 #include <bits/stdc++.h> 02 using namespace std; 03 int i, j, k, n, m, f[10010], p1, p2, p3; 04 int find(int k) { 05 if (f[k] == k) return k; 06 return f[k] = find(f[k]); 07 } 08 int main() { 09 cin >> n >> m; 10 for (i = 1; i <= n; i++) f[i] = i; 11 for (i = 1; i <= m; i++) { 12 cin >> p1 >> p2 >> p3; 13 if (p1 == 1) f[find(p2)] = find(p3); 14 if (p1 == 2) 15 if (find(p2) == find(p3)) printf("Y\n"); 16 else printf("N\n"); 17 } 18 return 0; 19 }
1. 该算法中 p1 的作用是确定操作类型
2. 去掉第 10 行 for(i=1;i<=n;i++) f[i]=i; 对该算法没有影响
3. 输入 2 1 2 1 2 输出为 N
4. 输入 2 2 1 1 2 2 1 2 输出为 Y
5. 该算法最坏时间复杂度为( )
6. 把 return f[k]=find(f[k]); 改成 return find(f[k]); 最差时间复杂度为( )