Cod sursa(job #1403325)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 27 martie 2015 10:54:30
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;
const int N=100001;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[N],ina[N];
int find(int x)
{
    int pas=x;
    while(tata[pas]) pas=tata[pas];
    int trec=x,aux;
    while(trec!=pas)
    {
        aux=tata[trec];
        tata[trec]=pas;
        trec=aux;
    }
    return pas;
}
void unione(int x,int y)
{
    if(ina[x]>ina[y]) tata[y]=x;
    else
    {
        tata[x]=y;
        if(ina[x]==ina[y]) ina[y]++;
    }
}
int main()
{
    int n,m,i,ok,x,y;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>ok>>x>>y;
        if(ok==1) unione(x,y);
        else if(find(x)==find(y)) fout<<"DA\n";
        else fout<<"NU\n";
    }
}