On the data generated [tree]

 

I is limited, at the problem is not the solution, a lot of understanding

 

Thank you for watching this konjac

 

 

 

How to make a program written to run their own data again randomly made, then we have to use

 

Data generation.

 

This article only describes the spanning tree ( I will not tell you now I will only tree )

 

Topic : Portal

 

Common tree generation :( randomly generated 10 data )

 

Note: The last of the 10 data to be manually debug , although I do not know why.

 

The upper half is a tree, the lower half of the subject claims .

 

code:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 inline int random(int x) {
 5     return (rand()*RAND_MAX+rand())%x;
 6 } 
 7 inline int rendom(int l,int r) {
 8     return (rand()*RAND_MAX+rand())%(r-l+1)+l; 
 9 }
10 using namespace std;
11 int main(){
12 //    freopen("bbb.in","r",stdin);
13     srand(time(0));
14     char si[]="bbb1.in",so[]="bbb1.out";
15     for(int i=1;i<=10;i++) {
16         freopen(si,"w",stdout);
17         si[3]=so[3]='1'+i;
18         cerr<<i<<endl;
19         int x=random(100000);
20         printf("%d\n",x);
21         for (int i=2;i<=x;i++){
22             int fa=random(i-1)+1;
23             int val=random(100000)+1;
24             //int a=random(10),b=random(10),c=random(10);
25             printf("%d %d %d\n",fa,i,val);
26         }int m=random(100000);
27         printf("%d\n",m);
28     //    set<int> s; 
29         for (int i=1;i<=m;i++){
30             int a=rendom(1,x);
31             int b=rendom(1,x);
32             int c=rendom(1,x);
33             int d=rendom(1,x);
34             if(a>b)swap(a,b);
35             if(c>d)swap(c,d); 
36             printf("%d %d %d %d\n",a,b,c,d);
37     //        while(s.size()<=4){
38     //            s.insert(random(1,1e5)); 
39     //        } 
40     //        while(s.size()){
41     //            s.insert(random(1,1e5)); 
42     //        } 
43         }
44     }
45     return 0;
46 }

 

Similarly, random spanning tree chain as follows:

code:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 inline int random(int x) {
 5     return (rand()*RAND_MAX+rand())%x;
 6 } 
 7 inline int rendom(int l,int r) {
 8     return (rand()*RAND_MAX+rand())%(r-l+1)+l; 
 9 }
10 using namespace std;
11 int main(){
12 //    freopen("bbb.in","r",stdin);
13     srand(time(0));
14     char si[]="bbb2.in",so[]="bbb2.out";
15 //    for(int i=1;i<=10;i++) {
16         freopen(si,"w",stdout);
17 //        si[3]=so[3]='1'+i;
18 //        cerr<<i<<endl;
19         int x=random(100000);
20         printf("%d\n",x);
21         for (int i=2;i<=x;i++){
22             int fa=rendom(max(1,i-10),i-1);
23             int val=random(10000)+1;
24             //int a=random(10),b=random(10),c=random(10);
25             printf("%d %d %d\n",fa,i,val);
26         }int m=random(100000);
27         printf("%d\n",m);
28     //    set<int> s; 
29         for (int i=1;i<=m;i++){
30             int a=rendom(1,x);
31             int b=rendom(1,x);
32             int c=rendom(1,x);
33             int d=rendom(1,x);
34             if(a>b)swap(a,b);
35             if(c>d)swap(c,d); 
36             printf("%d %d %d %d\n",a,b,c,d);
37     //        while(s.size()<=4){
38     //            s.insert(random(1,1e5)); 
39     //        } 
40     //        while(s.size()){
41     //            s.insert(random(1,1e5)); 
42     //        } 
43         }
44 //    }
45     return 0;
46 }

 

Randomly generated Chrysanthemum FIG follows:

code:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 inline int random(int x) {
 5     return (rand()*RAND_MAX+rand())%x;
 6 } 
 7 inline int rendom(int l,int r) {
 8     return (rand()*RAND_MAX+rand())%(r-l+1)+l; 
 9 }
10 using namespace std;
11 int main(){
12 //    freopen("bbb.in","r",stdin);
13     srand(time(0));
14     char si[]="bbb3.in",so[]="bbb1.out";
15 //    for(int i=1;i<=10;i++) {
16         freopen(si,"w",stdout);
17 //        si[3]=so[3]='1'+i;
18 //        cerr<<i<<endl;
19         int x=random(100000);
20         printf("%d\n",x);
21         for (int i=2;i<=x/2;i++){ 
22             int fa=rendom(1,min(i-1,10));
23             int val=random(10000)+1;
24             //int a=random(10),b=random(10),c=random(10);
25             printf("%d %d %d\n",fa,i,val);
26         }for (int i=x/2+1;i<=x;i++){
27             int fa=rendom(max(1,i-10),i-1);
28             int val=random(10000)+1;
29             //int a=random(10),b=random(10),c=random(10);
30             printf("%d %d %d\n",fa,i,val);
31         }int m=random(100000);
32         printf("%d\n",m);
33     //    set<int> s; 
34         for (int i=1;i<=m;i++){
35             int a=rendom(1,x);
36             int b=rendom(1,x);
37             int c=rendom(1,x);
38             int d=rendom(1,x);
39             if(a>b)swap(a,b);
40             if(c>d)swap(c,d); 
41             printf("%d %d %d %d\n",a,b,c,d);
42     //        while(s.size()<=4){
43     //            s.insert(random(1,1e5)); 
44     //        } 
45     //        while(s.size()){
46     //            s.insert(random(1,1e5)); 
47     //        } 
48         }
49 //    }
50     return 0;
51 }

 

Generating data above can only be generated read data, and can not count the output standard .

 

Operators standard output:

Note: Figures in freopen to constantly update their hand from 1 to 10.

code:

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 typedef long long ll;
  4 int n,m,first[100010]={0},tot=0;
  5 int st[200010],top=0,dep[100010],pos[100010];
  6 int mnp[200010][21],p[200010];
  7 int seg[400010][2];
  8 ll dis[100010];
  9 struct edge
 10 {
 11     int v,next;
 12     ll d;
 13 }e[200010];
 14 
 15 void insert(int a,int b,ll d)
 16 {
 17     e[++tot].v=b;
 18     e[tot].d=d;
 19     e[tot].next=first[a];
 20     first[a]=tot;
 21 }
 22 
 23 void dfs(int v,int fa)
 24 {
 25     st[++top]=v;
 26     pos[v]=top;
 27 
 28     for(int i=first[v];i;i=e[i].next)
 29         if (e[i].v!=fa)
 30         {
 31             dep[e[i].v]=dep[v]+1;
 32             dis[e[i].v]=dis[v]+e[i].d;
 33             dfs(e[i].v,v);
 34             st[++top]=v;
 35         }
 36 }
 37 
 38 void rmq_init()
 39 {
 40     for(int i=1;i<=top;i++)
 41         mnp[i][0]=st[i];
 42     for(int i=1;i<=20;i++)
 43         for(int j=1;j+(1<<i)-1<=top;j++)
 44         {
 45             if (dep[mnp[j][i-1]]<dep[mnp[j+(1<<(i-1))][i-1]])
 46                 mnp[j][i]=mnp[j][i-1];
 47             else mnp[j][i]=mnp[j+(1<<(i-1))][i-1];
 48         }
 49     p[1]=0;
 50     for(int i=2;i<=top;i++)
 51     {
 52         if (1<<(p[i-1]+1)<i) p[i]=p[i-1]+1;
 53         else p[i]=p[i-1];
 54     }
 55 }
 56 
 57 int rmq(int l,int r)
 58 {
 59     int x=p[r-l+1];
 60     if (dep[mnp[l][x]]<dep[mnp[r-(1<<x)+1][x]])
 61         return mnp[l][x];
 62     else return mnp[r-(1<<x)+1][x];
 63 }
 64 
 65 ll dist(int a,int b)
 66 {
 67     int g=rmq(min(pos[a],pos[b]),max(pos[a],pos[b]));
 68     return dis[a]+dis[b]-2ll*dis[g];
 69 }
 70 
 71 void merge(int a1,int a2,int b1,int b2,int &s1,int &s2)
 72 {
 73     ll ans=0;
 74     if (dist(a1,a2)>ans) ans=dist(a1,a2),s1=a1,s2=a2;
 75     if (dist(a1,b1)>ans) ans=dist(a1,b1),s1=a1,s2=b1;
 76     if (dist(a1,b2)>ans) ans=dist(a1,b2),s1=a1,s2=b2;
 77     if (dist(a2,b1)>ans) ans=dist(a2,b1),s1=a2,s2=b1;
 78     if (dist(a2,b2)>ans) ans=dist(a2,b2),s1=a2,s2=b2;
 79     if (dist(b1,b2)>ans) ans=dist(b1,b2),s1=b1,s2=b2;
 80 }
 81 
 82 void pushup(int no)
 83 {
 84     merge(seg[no<<1][0],seg[no<<1][1],seg[no<<1|1][0],seg[no<<1|1][1],seg[no][0],seg[no][1]);
 85 }
 86 
 87 void buildtree(int no,int l,int r)
 88 {
 89     if (l==r)
 90     {
 91         seg[no][0]=seg[no][1]=l;
 92         return;
 93     }
 94     int mid=(l+r)>>1;
 95     buildtree(no<<1,l,mid);
 96     buildtree(no<<1|1,mid+1,r);
 97     pushup(no);
 98 }
 99 
100 void query(int no,int l,int r,int s,int t,int &ans1,int &ans2)
101 {
102     if (l>=s&&r<=t)
103     {
104         merge(ans1,ans2,seg[no][0],seg[no][1],ans1,ans2);
105         return;
106     }
107     int mid=(l+r)>>1;
108     if (s<=mid) query(no<<1,l,mid,s,t,ans1,ans2);
109     if (t>mid) query(no<<1|1,mid+1,r,s,t,ans1,ans2);
110 }
111 
112 int main()
113 {
114     freopen("bbb1.in","r",stdin);
115     freopen("bbb1.out","w",stdout);
116     scanf("%d",&n);
117     for(int i=1;i<n;i++)
118     {
119         int x,y;
120         ll z;
121         scanf("%d%d%lld",&x,&y,&z);
122         insert(x,y,z),insert(y,x,z);
123     }
124     top=0;
125     dep[1]=dis[1]=0;
126     dfs(1,0);
127     rmq_init();
128     
129     buildtree(1,1,n);
130     scanf("%d",&m);
131     for(int i=1;i<=m;i++)
132     {
133         int a,b,c,d;
134         scanf("%d%d%d%d",&a,&b,&c,&d);
135         int a1=a,a2=a,b1=c,b2=c;
136         ll ans=0;
137          query ( 1 , 1 , n, a, b, a1, a2);
138          query ( 1 , 1 , n, c, d, b1, b2);
139          years = max (year dist (a1, b1));
140          years = max (year dist (a1, b2));
141          years = max (years dist (a2, b1));
142          years = max (year dist (a2, b2));
143          printf ( " % lld \ n " , year);
144      }
 145      return  0 ;
146 }

 

We continue to run the program button

Such a data set of 10 so made good.

Guess you like

Origin www.cnblogs.com/nlyzl/p/11832761.html
Recommended