Cod sursa(job #1051367)

Utilizator AllxCucuCucu Alexandru AllxCucu Data 9 decembrie 2013 22:52:54
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define max 100003
int uneste(int tati[max], int x, int y)
{
    int j=x,i=y,sx=0,sy=0;
    if(tati[x-1]==tati[x])
    while(tati[j]==tati[x]) j--;
    while(tati[j]==tati[x])
    {
                 j++;
                 sx++;
                 }    
                 if(tati[y-1]==tati[y])
                 while(tati[i]==tati[y]) i--;
                 while(tati[i]==tati[y])
                 {
                                        i++;
                                        sy++;
                                        }
                                        i--;
                                        j--;
                                        if(sx>sy)
                                        while(tati[i]==tati[y])
                                        {
tati[i]=tati[x];
i--;
}
else
while(tati[j]==tati[x])
{
                       tati[j]=tati[y];
                       j--;
                       }
                       
return 0;
}
int main()
{
    int tati[max],n,m,i,t,x,y;
    fin>>n>>m;
    for(i=1; i<=n; i++)
tati[i]=i;
    for(i=1; i<=m; i++)
    {
             fin>>t>>x>>y;
             if(t==1)
             uneste(tati, x, y);
else
                     if(tati[x]==tati[y]) fout<<"da";
                     else fout<<"nu";
                     }
                     return 0;
                     }