#include <iostream>
using namespace std;
const int maxn = 1000;
int n;
int fa[maxn], cnt[maxn];
int getRoot(int v) {
if (fa[v] == v) return v;
return getRoot(fa[v]);
}
int main() {
cin >> n;
for (int i = 0; i < n; ++i) {
fa[i] = i;
cnt[i] = 1;
}
int ans = 0;
for (int i = 0; i < n - 1; ++i) {
int a, b, x, y;
cin >> a >> b;
x = getRoot(a);
y = getRoot(b);
ans += cnt[x] * cnt[y];
fa[x] = y;
cnt[y] += cnt[x];
}
cout << ans << endl;
return 0;
}
判断题
(1 分)输入的 a 和 b 值应在 [0,n−1]的范围内。()
(1 分)第 16 行改成 fa[i] = 0;,不影响程序运行结果。()
若输入的 a 和 b 值均在 [0,n−1] 的范围内,则对于任意 0≤i<n 都有
0≤fa[i]<n ()
若输入的 a 和 b 值均在
[0,n−1] 的范围内,则对于任意 0≤i<n 都有 1≤cnt[i]≤n ()
选择题
当 n 等于50时,若 a,b 的值都在 [0,49] 的范围内,且在第 25 行时
x 总是不等于 y,那么输出为()。
此程序的时间复杂度是()。
1276
1176
1225
1250
O(n)
O(logn)
O(n2)
O(nlogn)