Cod sursa(job #275591)

Utilizator andr33aradu ioana andr33a Data 10 martie 2009 16:08:35
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream.h>  
ifstream f("disjoint.in");  
ofstream g("disjoint.out");  
const long Nmax=100100;  
long n,m,h[Nmax],t[Nmax];  
  
void verif(long x,long y)  
{  
 if(t[x]==t[y])  
    g<<"DA"<<'\n';  
 else  
    g<<"NU"<<'\n';  
}  
  
void reun(long x,long y)  
{  
 if(h[x]<h[y])  
 {  
    long z=x;  
    x=y;  
    y=z;  
 }  
 long z=t[y];  
 h[x]+=h[y];  
 long q=h[y];  
 for(long j=1;j<=n && q;j++)  
    if(t[j]==z)  
    {  
        t[j]=t[x];  
        h[j]=h[x];  
        q--;  
    }  
}  
  
void init()  
{  
 for(long i=1;i<=n;i++)  
 {  
    t[i]=i;  
    h[i]=1;  
 }  
}  
  
void citire()  
{  
 int z;  
 long x,y;  
 f>>n>>m;  
 init();  
 for(long i=0;i<m;i++)  
 {  
    f>>z>>x>>y;  
    switch(z)  
    {  
    case 1: reun(x,y);  
        break;  
    case 2: verif(x,y);  
        break;  
    }  
 }  
}  
  
int main()  
{  
 citire();  
 f.close();  
 g.close();  
 return 0;  
}