建一棵树的代码,跑到一半会突然卡出,求查错。
#include<bits/stdc++.h>
#define N 500005
using namespace std;
int n,q,x,y,z,f[N];
int gf(int k)
{
if (f[k]==k) return k;
return f[k]=gf(f[k]);
}
void merge(int x,int y)
{
f[x]=y;
}
/*signed main()
{
srand((long long)(time(0)*100000000000000));
n=rand()%5+5;
q=rand()%5+5;
cout<<n<<" "<<q<<endl;
for (int i=1;i<=n;i++)
{
cout<<rand()%5+5<<" ";
f[i]=i;
}
cout<<endl;
for (int i=1;i<n;i++)
{
x=rand()%n+1;
y=rand()%n+1;
while (gf(x)==gf(y))
x=rand()%n+1,y=rand()%n+1;
cout<<x<<" "<<y<<endl;
f[gf(x)]=gf(y);
}
for (int i=1;i<=q;i++)
{
x=rand()%n+1;y=rand()%n+1;z=rand()%n+1;
cout<<x<<" "<<y<<" "<<z<<endl;
}
}*/
signed main()
{
srand((long long)(time(0)*100000000000000));
n=rand()%10000+90000;
q=rand()%10000+90000;
cout<<n<<" "<<q<<endl;
for (int i=1;i<=n;i++)
{
cout<<rand()%10000+90000<<" ";
f[i]=i;
}
cout<<endl;
for (int i=1;i<n;i++)
{
x=rand()%n+1;
y=rand()%n+1;
while (gf(x)==gf(y))
x=rand()%n+1,y=rand()%n+1;
cout<<x<<" "<<y<<endl;
f[gf(x)]=gf(y);
}
for (int i=1;i<=q;i++)
{
x=rand()%n+1;y=rand()%10+90;z=rand()%n+1;
cout<<x<<" "<<y<<" "<<z<<endl;
}
}