Pagini recente » Cod sursa (job #1850326) | Cod sursa (job #642351) | Cod sursa (job #2553933) | Cod sursa (job #3296999) | Cod sursa (job #2397195)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int gasesteParinte(vector<int> &p, int i)
{
while(p[i]!=i)
{
p[i]=p[p[i]];
i=p[i];
}
return i;
}
void Union(vector<int> &com,vector<int> &parinte, int x, int y)
{
if(com[x]<com[y])
{
int xr=gasesteParinte(parinte,x);
int yr=gasesteParinte(parinte,y);
parinte[xr]=parinte[yr];
com[yr]+=com[xr];
}else
{
int xr=gasesteParinte(parinte,x);
int yr=gasesteParinte(parinte,y);
parinte[yr]=parinte[xr];
com[xr]+=com[yr];
}
}
int main()
{
int n,m;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
int op,op1,op2;
vector<int> componente(n+1,1);
vector<int> parinte(n+1);
for(int i=1;i<=n;i++)
parinte[i]=i;
for(int i=0;i<m;i++)
{
f>>op>>op1>>op2;
switch(op)
{
case 1:
{
Union(componente,parinte,op1,op2);
break;
}
case 2:
{
if(gasesteParinte(parinte,op1)==gasesteParinte(parinte,op2))
g<<"DA"<<endl;
else g<<"NU"<<endl;
break;
}
}
}
return 0;
}