请问出题人出树的数据时是怎么做到的?
在网上搜到了这样一个代码,能够跑到1e3的级别
#include<bits/stdc++.h>
using namespace std;
int a[10005],e[10005][2];
int n = 3000;
bool flag[10005];
int main() {
freopen("test.in","w",stdout);
printf("%d\n",n);
for(int i = 1 ; i <= n ; i++) {
a[i] = rand() % n + 1;
while(flag[a[i]])
a[i] = rand() % n + 1;
flag[a[i]] = 1;
}
for(int i = 2 ; i <= n ; i++) {
e[i-1][0] = a[i];
e[i-1][1] = a[rand() % (i - 1) + 1];
}
memset(flag,0,sizeof(flag));
for(int i = 1 ; i < n ; i++) {
int x = rand() % (n - 1) + 1;
while(flag[x])
x = rand() % (n - 1) + 1;
flag[x] = 1;
int f = rand() % 2;
if(f) printf("%d %d\n",e[x][0],e[x][1]);
else printf("%d %d\n",e[x][1],e[x][0]);
}
return 0;
}
10000以内的数据都跑的蛮好,然而,当我把n设成50000时,他就过了好长时间还啥都没输出。
怀疑是复杂度偏高,不知道大家有没有什么更好的方法