Cod sursa(job #276880)

Utilizator BloodRainBurceanu Gabriel BloodRain Data 11 martie 2009 13:04:56
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream.h>  
ifstream in("disjoint.in");  
ofstream out("disjoint.out");  
int *t,*rg,n,m,i,o,a,b;  
int rad(int nod)  
     {  
     int y;  
     int x;  
     x=nod;  
     while(t[nod]!=nod)  
         {  
         nod=t[nod];  
         }  
     while(t[x]!=x)  
		{  
         y=t[x];  
         t[x]=nod;  
         x=y;  
		}  
    return nod;  
    }  
int main(void)  
{  
in>>n>>m;  
t=new int[n+21];  
rg=new int[n+21];  
for(i=1;i<=n;i++)  
    {  
    t[i]=i;  
    rg[i]=1;  
    }  
for(i=1;i<=m;i++)  
    {  
    in>>o>>a>>b;  
    if(o==1)  
	{
	if(rg[a]<rg[b]) t[a]=b;
	else t[b]=a;
	if(rg[a]==rg[b]) rg[b]++;
	}
    else
	{
	if(rad(a)==rad(b)) out<<"DA\n";
	else out<<"NU\n";
        }  
    }  
in.close();  
out.close();  
delete t;  
delete rg;  
return 0;  
}