Pagini recente » Cod sursa (job #3212832) | Cod sursa (job #173100) | Cod sursa (job #1229981) | Clasament gr_4 | Cod sursa (job #2566852)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("dijoint.out");
int root[NMAX],sz[NMAX];
int N,M;
int find_rad(int p)
{
int radacina = p,urm;
while(radacina != root[radacina])
radacina = root[radacina];
while(p != radacina)
{
urm = root[p];
root[p] = radacina;
p = urm;
}
return radacina;
}
void Union(int p , int q)
{
int rad1,rad2;
rad1 = find_rad(p);
rad2 = find_rad(q);
if(rad1 != rad2)
{
if(sz[rad1] < sz[rad2])
{
sz[rad2] += sz[rad1];
root[rad1] = rad2;
}
else
{
sz[rad1] += sz[rad2];
root[rad2] = rad1;
}
}
}
void solve()
{
int i,j,var;
int Rad1,Rad2;
f >> N>> M;
for(int i = 1 ; i <= N; i++)
{
root[i] = i;
sz[i] = 1;
}
while(M)
{
f >> var >> i >> j;
if(var == 1)
Union(i,j);
else
{
Rad1= find_rad(i);
Rad2= find_rad(j);
if(Rad1 == Rad2)
g << "DA" <<'\n';
else
g << "NU" <<'\n';
}
M--;
}
}
int main()
{
solve();
return 0;
}