标签:getch == col out inpu include 一个 input 输入
如题,现在有一个并查集,你需要完成合并和查询操作。
第一行包含两个整数N、M,表示共有N个元素和M个操作。
接下来M行,每行包含三个整数Zi、Xi、Yi
当Zi=1时,将Xi与Yi所在的集合合并
当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N
如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N
4 7 2 1 2 1 1 2 2 1 2 1 3 4 2 1 4 1 2 3 2 1 4
N Y N Y
时空限制:1000ms,128M
数据规模:
对于30%的数据,N<=10,M<=20;
对于70%的数据,N<=100,M<=1000;
对于100%的数据,N<=10000,M<=200000。
模板题,我还要讲什么呢······
#include<cstdio> #include<iostream> #include<algorithm> #pragma GCC optimize(2) #pragma GCC optimize(3) using namespace std; int n,m; int father[10005]; inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)w=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) s=s*10+ch-‘0‘,ch=getchar(); return s*w; } /*int find(int x){ while(x!=father[x]){ x=father[x]; } return x; }*/ int find(int p){ if(father[p]==p){ return p; } return father[p]=find(father[p]); } void C(int a,int b){ int fa=find(a); int fb=find(b); /*if(fa!=fb) { father[fa]=fb; }*/ father[fa]=fb; } int main(){ n=read(); m=read(); for(int k=1;k<=n;k++){ father[k]=k; } while(m--){ int z,x,y; z=read(); x=read(); y=read(); if(z==1){ C(x,y); } else{ int i=find(x); int j=find(y); if(i!=j){ printf("N\n"); } else{ printf("Y\n"); } } } return 0; }
标签:getch == col out inpu include 一个 input 输入
原文地址:https://www.cnblogs.com/hrj1/p/11129747.html