Pagini recente » Cod sursa (job #73314) | Cod sursa (job #480181) | Cod sursa (job #588280) | Cod sursa (job #2696873) | Cod sursa (job #1947588)
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
int s[N], k[N];
int find(int x){
int x1=x;
while(x!=k[x])x=k[x];
while(x1!=k[x1]){
int y=x1;
x1=k[x1];
k[y]=x;
}
return x;
}
void unite(int a, int b){
a=find(a);
b=find(b);
if(s[a]<s[b]) swap(a, b);
s[a]+=s[b];
k[b]=k[a];
find(b);
find(a);
}
int main(){
int n, m;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(int i=1;i<=n;i++){
s[i]=1;
k[i]=i;
}
while(m--){
int t, x, y;
f>>t>>x>>y;
if(t==1) unite(x, y);
else{
if(find(x)==find(y)) g<<"DA"<<endl;
else g<<"NU"<<endl;
}
}
}