Pagini recente » Cod sursa (job #1660292) | Cod sursa (job #763238) | Statistici Mihail Balan (bolov) | Cod sursa (job #1707807) | Cod sursa (job #2419750)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
#define NMAX 100100
ifstream f("disjoint.in");
ofstream g("disjoint.out");
vector <pair <int,int> >graf[NMAX];
int n, m;
int grad[NMAX], tata[NMAX];
int FindFather(int nod)
{
if(tata[nod] == nod)
return nod;
tata[nod] = FindFather(tata[nod]);
return tata[nod];
}
void init(int n)
{
int i;
for(i = 1; i <=n; i++)
{
tata[i]=i;
grad[i]=1;
}
}
void combina(int x, int y)
{
int fx, fy;
fx = FindFather(x);
fy = FindFather(y);
if(fx != fy)
{
if(grad[fx] > grad[fy])
{
tata[fy] = fx;
grad[fx] += grad[fy];
}
else
{
tata[fx] = fy;
grad[fy] += grad[fx];
}
}
}
int main()
{
int i, c, x, y;
f >> n >> m;
init(n);
for(i = 0; i < m; i++)
{
f>>c>>x>>y;
if(c == 1)
combina(x,y);
else
{
if(FindFather(x) == FindFather(y))
g<<"DA"<<endl;
else
g<<"NU"<<endl;
}
}
return 0;
}