Pagini recente » Cod sursa (job #2122708) | Cod sursa (job #1163878) | Cod sursa (job #2698107) | Cod sursa (job #347125) | Cod sursa (job #1989370)
#include<fstream>
using namespace std;
const int N=100020;
int s[N], d[N];
int find(int x){
int x1=x;
while(x != d[x]) x=d[x];
while(x1 != d[x]){
int y=x1;
x1=d[x1];
d[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];
d[b]=a;
find(b);
}
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, d[i]=i;
int x, y, k;
while(m--){
f>>k>>x>>y;
if(k==1) unite(x, y); else (find(x)==find(y) ? g<<"DA\n" : g<<"NU\n");
}
return 0;
}