2019年CSP-S1提高组初赛阅读程序题:
#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; }
输入的a和b值应在[0,n-1]的范围内。( )
第16行改成“fa[i]=0;”, 不影响程序运行结果。( )
1276
1176
1225
1250
此程序的时间复杂度是( )
O(n)
O(log n)
O(n^2)
O(n log n)