Pagini recente » Cod sursa (job #2821951) | Rating Chiuta Mihai Marcel (chiutamarcel) | Cod sursa (job #2047136) | Istoria paginii template/preoni-2008 | Cod sursa (job #2200501)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *f,*g;
int t[100002], rang[100002];
int m,n;
int multime(int node)
{
int r=node,aux;
while(r!=t[r])
r=t[r];
while(node!=t[node])
{
aux=t[node];
t[node]=r;
node=aux;
}
return r;
}
void reuneste(int i,int j)
{ if(rang[i]>rang[j])
t[j]=i;
else
t[i]=j;
if(rang[j]==rang[i])
rang[j]++;
}
int main()
{ int q=0,i,j,cost,rez=0,x;
f=fopen("disjoint.in","r");
g=fopen("disjoint.out","w");
fscanf(f,"%d %d",&n,&m);
for(int i=1; i<=n; i++)
{
t[i]=i;
rang[i]=0;
}
for(int l=1; l<=m; l++)
{
fscanf(f,"%d %d %d",&x,&i,&j);
if(x==1)
reuneste(multime(i),multime(j));
else
{
if(multime(i)==multime(j))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
}
return 0;
}