不是VIP会员,不能显示答案

题目解答

题目:
#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) (1分)输入的a和b值应在[0, n-1]的范围内。()

2) (1分)第16行改成“ fa[i] = 0;”,不影响程序运行结果。()

3) 若输入的a和b值均在[0, n-1]的范围内,则对于任意0<=i<n 都有0 <= fa[i] <n ()

4) 若输入的a和b值均在[0, n-1]的范围内,则对于任意0<=i<n都有1 <=cnt[i]<=n ()


选择题

5) 当n等于50时,若a、b的值都在[0,49]的范围内,且在第25行时x 总是不等于y,那么输出为()。

6) 此程序的时间复杂度是()。
考点:
分析:
解答:
评论:
老师: