Cod sursa(job #995246)

Utilizator Eugen_VlasieFMI Vlasie Eugen Eugen_Vlasie Data 8 septembrie 2013 12:46:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
vector <int> a[100001];
int n,m,c,x,y,i,j,cx,cy,d[100001];
void verif()
{
    int ii,jj;
    for(ii=1;ii<=n;ii++)
    {
        for(jj=0;jj<a[ii].size();jj++)
            g<<a[ii][jj]<<" ";
        g<<'\n';
    }
}
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>c>>x>>y;
        if(c==1)
        {
            while(a[x].size())
            {
                x=a[x][0];
            }
            while(a[y].size())
            {
                y=a[y][0];
            }
            if(d[x]>d[y])
                a[y].push_back(x);
            else
                if(d[y]>d[x])
                    a[x].push_back(y);
                else
                {
                    a[x].push_back(y);
                    d[y]++;
                }
        }
        else
        {
            cx=x;
            cy=y;
            while(a[cx].size())
            {

                cx=a[cx][a[cx].size()-1];
            }
            while(a[cy].size())
            {
                cy=a[cy][a[cy].size()-1];
            }
            if(cx==cy)
                g<<"DA"<<'\n';
            else
                g<<"NU"<<'\n';
            while(a[x].size()&&a[x][a[x].size()-1]!=cx)
            {
                a[x].push_back(cx);
                x=a[x][a[x].size()-2];
            }
            while(a[y].size()&&a[y][a[y].size()-1]!=cy)
            {
                a[y].push_back(cy);
                y=a[y][a[y].size()-2];
            }
        }
    }
    return 0;
}