提供数据生成器(非强制在线)
查看原帖
提供数据生成器(非强制在线)
1175391
___1cm___楼主2025/7/31 20:02
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define inf64 (long long)0x3f3f3f3f3f3f3f3f
#define inf32 (int)0x3f3f3f3f
#define _inf32 (int)0xc0c0c0c0
#define _inf64 (long long)0xc0c0c0c0c0c0c0c0
#define N 10
#define M 10
#define V 10000
int in(){
    int sum=0,op=1,c=getchar();
    while(c<48||57<c)op=(c==45?-1:1),c=getchar();
    while(48<=c&&c<=57)sum=(sum<<3)+(sum<<1)+c-48,c=getchar();
    return sum*op;
}
int r(int l,int r){
    int len=r-l+1;
    srand(rand());
    return rand()*rand()%len+l;
}
using namespace std;
using namespace __gnu_pbds;
int n,m,u,v,op,x,y,nume;
int siz[N],f[N];
int val[N];
int find(int x){
    return f[x]==x?x:f[x]=find(f[x]);
}
bool mer(int x,int y){
    x=find(x),y=find(y);
    if(x==y)return 0;
    if(siz[x]>siz[y])swap(x,y);
    f[x]=y;
    siz[y]+=siz[x];
    siz[x]=0;
    return 1;
}
int main(){
    freopen("sum.out","w",stdout);
    srand(time(0));
    n=N,m=M;
    printf("%d %d\n",n,m);
    for(int i=1;i<=n;i++){
        val[i]=r(1,V);
        printf("%d ",val[i]);
    }
    printf("\n");
    for(int i=1;i<=n;i++){
        siz[i]=1,f[i]=i;
    }
    while(nume<n-1){
        // cerr<<nume<<endl;
        u=r(1,n-1);
        v=r(u+1,n);
        if(mer(u,v)){
            printf("%d %d\n",u,v);
            nume++;
        }
    }
    for(int i=1;i<=m;i++){
        op=rand()&1;
        x=r(1,n);
        if(op){
            y=r(1,V);
        }else{
            y=r(0,n-1);
        }
        printf("%d %d %d\n",op,x,y);
    }
}

非强制在线,所以请注释掉异或上次输出

2025/7/31 20:02
加载中...