Pagini recente » Cod sursa (job #1672711) | Cod sursa (job #2484001) | Cod sursa (job #992619) | Cod sursa (job #3259169) | Cod sursa (job #2986523)
#include <iostream>
#include <vector>
#include <stack>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("protest.in");
ofstream fout("protest.out");
int N,M,mult[100001],sz[100001];
int Find(int a)
{
int root;
root=a;
while(mult[root]!=root)
root=mult[root];
while (mult[a]!=root)
{
int aux=mult[a];
mult[a]=root;
a=aux;
}
return root;
}
void Union(int a,int b)
{
int root_a=Find(a);
int root_b=Find(b);
if (sz[root_a]<sz[root_b])
{
sz[root_b]=sz[root_a];
mult[root_a]=root_b;
}
else
{
sz[root_a]=sz[root_b];
mult[root_b]=root_a;
}
}
int main()
{
fin>>N>>M;
for (int i=1; i<=N; i++)
{
mult[i]=i;
sz[i]=1;
}
for (int i=1; i<=M; i++)
{
int cod,x,y;
fin>>cod>>x>>y;
if (cod==1)
{
Union(x,y);
}
else
{
Find(x);
Find(y);
if (mult[x]==mult[y])
fout<<"DA"<<endl;
else
fout<<"NU"<<endl;
}
}
return 0;
}