树的数据
  • 板块学术版
  • 楼主pengyule
  • 当前回复10
  • 已保存回复10
  • 发布时间2020/7/22 10:22
  • 上次更新2023/11/6 22:37:20
查看原帖
树的数据
300078
pengyule楼主2020/7/22 10:22

请问出题人出树的数据时是怎么做到的?

在网上搜到了这样一个代码,能够跑到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时,他就过了好长时间还啥都没输出。

怀疑是复杂度偏高,不知道大家有没有什么更好的方法

2020/7/22 10:22
加载中...