Cod sursa(job #2077542)

Utilizator alexandruilieAlex Ilie alexandruilie Data 28 noiembrie 2017 11:00:43
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int h[100001],t[100001],n,m,i,c,r1,r2;
void unionc(int x,int y)
{
    if(h[x]<h[y]) t[x]=y;
    else t[y]=x;
    if(h[x]==h[y]) h[x]++;
}
int findc(int x)
{
    int r=x;
    while(t[r]!=r) r=t[r];
    int y=x;
    while(y!=r)
    {
        int t1=t[y];
        t[y]=r;
        y=t1;
    }
    return r;
}
int main()
{
    int x,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
        h[i]=1,t[i]=i;
    for(i=1;i<=m;i++)
    {
        f>>c>>x>>y;
        if(c==1) unionc(x,y);
        else {
            r1=findc(x);
            r2=findc(y);
            if(r1==r2) g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}