c++随机生成树

分析

当我们写完一道题,自认为它是正解,但是交上去却WA的时候,我们该怎么办呢

当我们已经想出了一道的暴力解法,又想出了一种比较优秀的解法,但不知道这种解法对错与否,我们该怎么办呢

答案显然是对拍

对于我们之前做过的题,可能对数据的要求并不是那么严格,所以一个rand()%a+b就可以解决问题

但是最近,我们学习了树形DP,很多题目上都要求给出的数据必须是严格的一棵树,这样的话,我们随机生成数据就有了难度

但是,联系我们之前学过的知识,我们可以用并查集解决这个问题

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,cnt,fa[100015];
 4 int zhao(int xx){
 5   if(fa[xx]==xx) return xx;
 6   else return zhao(fa[xx]);
 7 }
 8 int main(){
 9     srand(time(0));
10     int n=rand()%10+2;
11     printf("%d
",n);
12     for(int i=1;i<=n;i++){
13     fa[i]=i;
14   }
15     while(cnt<n-1){
16         int x=rand()%n+1,y=rand()%n+1;
17         int x1=zhao(x),y1=zhao(y);
18         if(x1!=y1){
19       fa[x1]=y1,cnt++;
20       printf("%d %d
",x,y);
21     }
22     }
23     return 0;
24 }
View Code
原文地址:https://www.cnblogs.com/liuchanglc/p/12660132.html