Pagini recente » Cod sursa (job #1912056) | Cod sursa (job #1467568) | Monitorul de evaluare | Cod sursa (job #1720144) | Cod sursa (job #1473376)
#include <stdio.h>
#define nmax 100010
using namespace std;
int n,m,i,j,tip,x,y,rang[nmax],sz[nmax],tata[nmax];
int root(int x)
{
if (x==tata[x]) return x; else
return tata[x]=root(tata[x]);
}
void unite(int x,int y)
{
x=root(x); y=root(y);
if (x!=y) {
if (rang[x]<rang[y]) {
tata[y]=x; sz[y]=sz[y]+sz[x];
} else {
tata[x]=y; sz[x]=sz[x]+sz[y];
}
if (rang[x]==rang[y]) rang[y]++;
}
}
int main() {
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++) {
rang[i]=0; sz[i]=1; tata[i]=i;
}
for (i=1;i<=m;i++) {
scanf("%d %d %d",&tip,&x,&y);
if (tip==1) unite(x,y); else
if (root(x)==root(y)) puts("DA"); else
puts("NO");
}
return 0;
}