Pagini recente » Cod sursa (job #2723895) | Cod sursa (job #2196833) | Cod sursa (job #2286254) | Cod sursa (job #1921578) | Cod sursa (job #2397148)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct comp{
int parinte;
int rang;
};
int gasesteParinte(vector<comp> &p, int i)
{
if(p[i].parinte==-1)
p[i].parinte=gasesteParinte(p,p[i].parinte);
return p[i].parinte;
}
void Union(vector<comp> &p, int x, int y)
{
int xset = gasesteParinte(p, x);
int yset = gasesteParinte(p, y);
if(p[xset].rang<p[yset].rang)
p[xset].parinte=yset;
else if(p[xset].rang>p[yset].rang)
p[yset].parinte=xset;
if(p[xset].rang==p[yset].rang)
{
p[xset].parinte=yset;
p[xset].rang++;
}
}
int main()
{
long int n,m;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
int op,op1,op2;
vector<comp> componente(n+1);
for(int i=1;i<=n;i++)
{
componente[i].parinte=i;
componente[i].rang=0;
}
for(int i=0;i<m;i++)
{
f>>op>>op1>>op2;
switch(op)
{
case 1:
{
if(gasesteParinte(componente,op1)!=gasesteParinte(componente,op2))
Union(componente,op1,op2);
break;
}
case 2:
{
if(gasesteParinte(componente,op1)==gasesteParinte(componente,op2))
g<<"DA"<<endl;
else g<<"NU"<<endl;
break;
}
}
}
return 0;
}