Pagini recente » Cod sursa (job #2736703) | Cod sursa (job #2465285) | Cod sursa (job #2263015) | Cod sursa (job #1838848) | Cod sursa (job #2670812)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int MX=300000;
int m,n;
int link[MX], siz[MX], mxsz=1;
int find(int x){
if(link[x]==x) return x;
int l=find(link[x]);
link[x]=l;
return l;
}
void unite(int x, int y){
x=find(x), y=find(y);
if(siz[x]<siz[y]) swap(x,y);
link[y]=x;
siz[x]+=siz[y];
mxsz=max(siz[x],mxsz);
}
int main(){
fin>>n>>m;
for(int i=1;i<=n;++i)
siz[i]=1, link[i]=i;
for(int i=m;i--;){
int x,y, t;
fin>>t;
switch(t){
case 1:
fin>>x>>y;
unite(x,y);
break;
case 2:
fin>>x>>y;
x=find(x), y=find(y);
fout<<(x==y?"DA":"NU")<<"\n";
break;
case 3:
fout<<mxsz<<"\n";
break;
}
}
}