Pagini recente » Cod sursa (job #2615031) | Cod sursa (job #1560683) | Cod sursa (job #2757005) | Cod sursa (job #742276) | Cod sursa (job #2047123)
#include <iostream>
#include <fstream>
#include <vector>
#define N 100005
#define nod vecini[add][i]
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int arb[N],tati[N],n,m,op,x,y,root,add;
vector<int> vecini[N];
void join()
{
root=tati[x];
add=tati[y];
if(arb[root]<arb[add]) swap(root,add), swap(x,y);
for(int i=0;i<vecini[add].size();++i)
{
vecini[root].push_back(nod);
vecini[nod].resize(0);
vecini[nod].push_back(root);
tati[nod]=root;
}
vecini[root].push_back(add);
vecini[add].resize(0);
vecini[add].push_back(root);
tati[add]=root;
}
string check()
{
if(tati[x]==tati[y]) return "DA\n";
return "NU\n";
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i) arb[i]=1, tati[i]=i;
for(int i=1;i<=m;++i)
{
f>>op>>x>>y;
if(op==1) join();
if(op==2) g<<check();
}
return 0;
}