组合题

#include <cstdio>

using namepace 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]的范围内。( )

A 正确
B 错误
第2题 判断题

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

A 正确
B 错误
第3题 判断题

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

A 正确
B 错误
第4题 判断题

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

A 正确
B 错误
第5题 单选题

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

A

1276

B

1176

C

1225

D

1250

第6题 单选题

此程序的时间复杂度是( )

A

O(n)

B

O(log n)

C

O(n^2)

D

O(n log n)

赣ICP备20007335号-2