Pagini recente » Cod sursa (job #148076) | Cod sursa (job #1783977) | Cod sursa (job #447731) | Cod sursa (job #853492) | Cod sursa (job #1731742)
#include <fstream>
#include <iostream>
#define f first
#define s second
using namespace std;
int n;
pair<int,int> v[100005];
int findParent(int x) {
int p=x;
while(v[p].f!=p)
p=v[p].f;
while(x!=p) {
int last=x;
x=v[x].f;
v[last].f=p;
}
return p;
}
void mergeSets(int x, int y) {
x=findParent(x);
y=findParent(y);
if(x==y)
return;
if(v[x].s<v[y].s)
v[x].f=y;
else if(v[x].s>v[y].s)
v[y].f=x;
else
v[x].f=y,v[x].s++;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int m,a,b,c;
fin>>n>>m;
for(int i=1;i<=n;i++)
v[i].f=i;
for(int i=1;i<=m;i++) {
fin>>a>>b>>c;
if(a==1) {
mergeSets(b,c);
}
else {
if(findParent(b)==findParent(c))
fout<<"DA\n";
else
fout<<"NU\n";
}
}
return 0;
}