Cod sursa(job #3174557)
Utilizator | Data | 24 noiembrie 2023 21:46:09 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.92 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX=100001;
int n,m,x,y,cer,cx,cy;
int t[NMAX],rang[NMAX];
int Find(int i)
{
if(t[i]==i)
return i;
return t[i]=Find(t[i]);
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
rang[i]=1;
t[i]=i;
}
while(m--)
{
f>>cer>>x>>y;
cx=Find(x);
cy=Find(y);
if(cer==1)
{
if(rang[cx]>rang[cy])
t[cy]=cx;
else if(rang[cy]>rang[cx])
t[cx]=cy;
else if(rang[cx]==rang[cy])
{
rang[cx]++;
t[cy]=cx;
}
}
else
{
if(cx==cy)
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}