Pagini recente » Cod sursa (job #1625123) | Cod sursa (job #137624) | Cod sursa (job #1959530) | Cod sursa (job #2357950) | Cod sursa (job #750375)
Cod sursa(job #750375)
#include<fstream>
using namespace std;
#define nmax 100001
int T[nmax],rang[nmax];
void set(int x)
{
T[x]=x;
rang[x]=1;
}
void reuniune(int x,int y)
{
if(rang[x]>rang[y]) T[y]=x;
else if(rang[y]>rang[x]) T[x]=y;
else if(rang[x]==rang[y]){ T[x]=y; rang[y]++; }
}
int root(int x)
{
int i,aux;
for(i=x;i!=T[i];i=T[i]);
while(x!=T[x])
{
aux=T[x];
T[x]=i;
x=aux;
}
return i;
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int N, M, op, x, y;
f>>N>>M;
for(int i=1;i<=N;i++) set(i);
for(int i=1;i<=M;i++)
{
f>>op>>x>>y;
if(op==1)
reuniune(root(x),root(y));
if(op==2)
if(root(x)==root(y))
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}