Pagini recente » Cod sursa (job #235843) | Cod sursa (job #2852960) | Cod sursa (job #2704826) | Cod sursa (job #177117) | Cod sursa (job #1158680)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
struct edge
{
int v1;
int v2;
int l;
};
struct node
{
int parent;
int r;
};
int f(int x,vector<node> &vec)
{
if(vec[x].parent!=x)
vec[x].parent=f(vec[x].parent,vec);
else
return x;
}
void link(int x, int y,vector<node> &vec)
{
if(vec[x].r<=vec[y].r)
{
vec[x].parent=y;
if(vec[x].r==vec[y].r)
vec[y].r++;
}
else
{
vec[y].parent=x;
}
}
void un(int x,int y,vector<node> &vec)
{
link(f(x,vec),f(y,vec),vec);
}
void make_set(int x,vector<node> &vec)
{
vec[x].parent=x;
vec[x].r=0;
}
int main()
{
int n,m;
in>>n>>m;
vector<node> vec(1);
for(int i=1;i<=n;i++)
{
node tmp;
vec.push_back(tmp);
make_set(i,vec);
}
int i,j,k;
for(int i=1;i<=m;i++)
{
in>>i>>j>>k;
if(i==1)
un(j,k,vec);
if(i==2)
{
if(f(k,vec)==j || f(j,vec)==k)
out<<"DA"<<endl;
else
out<<"NU"<<endl;
}
}
return 0;
}