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.