Pagini recente » Cod sursa (job #1090297) | Cod sursa (job #2060134) | Cod sursa (job #1724787) | Cod sursa (job #2033363) | Cod sursa (job #2425711)
#include <iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
int n,m, start;
const int inf = 10000000;
int viz[100001];
vector<int>d;
vector<int>L[100001];
vector<int>v;
vector<int>t;
vector<int>grad;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
void init()
{
int i;
for(i=1;i<=n;i++)
t[i]=i;
}
int find_(int x)
{
if(x != t[x])
t[x] = find_(t[x]);
return t[x];
}
void union_(int x,int y)
{
int r1,r2;
r1=find_(x);
r2=find_(y);
if(grad[r1] > grad[r2])
t[r2]=r1;
else if(grad[r1] < grad[r2])
t[r1]=r2;
else
{
t[r1]=r2;
grad[r2]++;
}
}
void citire()
{
fin>>n>>m;
int i,j;
grad.resize(n+1,0);
t.resize(n+1,0);
init();
for(i=1;i<=m;i++)
{
int x,y,tip;
fin>>tip>>x>>y;
if(tip == 1)
union_(x,y);
else
{
if(find_(x) == find_(y))
fout<<"DA\n";
else fout<<"NU\n";
}
}
}
void bf(int start)
{
int i;
queue<pair<int,int> >Q;
Q.push({0,start});
d[start]=0;
viz[start]=1;
while(!Q.empty())
{
int x=Q.front().second;
int c=Q.front().first;
Q.pop();
for(auto p:L[x])
if(!viz[p])
{
d[p]=d[x]+1;
Q.push({d[p],p});
viz[p]=1;
}
}
}
int main()
{
int nr_c=0;
citire();
return 0;
}