Pagini recente » Cod sursa (job #521598) | Istoria paginii utilizator/uaic_chiligrozavartolomei | Cod sursa (job #3042261) | Cod sursa (job #223651) | Cod sursa (job #874787)
Cod sursa(job #874787)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,cod,comp[100002];
/*
daca val[i]<0,atunci acesta retine rangul nodului i;
daca val[i]>0,val[i]=k,k este tata pentru i;
*/
inline int find(int x)
{
int r,y;
r=x;
while(comp[r]>0)
r=comp[r];
while(comp[x]>0)
{
y=comp[x];
comp[x]=r;
x=y;
}
return r;
}
inline void unite(int x,int y)
{
if(comp[x]>comp[y])
{
comp[y]+=comp[x];
comp[x]=y;
}
else
{
comp[x]+=comp[y];
comp[y]=x;
}
}
inline void Read()
{
int i,x,y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(i=1;i<=n;i++)
comp[i]=-1;
for( i=1; i<=m ; i++)
{
f>>cod>>x>>y;
if(cod == 2)
{
if(find(x) == find(y))
g<<"DA"<<"\n";
else
g<<"NU"<<"\n";
}
else
unite(find(x),find(y));
}
f.close();
g.close();
}
int main()
{
Read();
return 0;
}