Cod sursa(job #2170673)

Utilizator laptop_boyCatalin Stretcu laptop_boy Data 15 martie 2018 09:19:54
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

vector<int> v[100002];
int ok[100002],n,m,type,x,y;

void verok(int x, int y)
{
    if(ok[x]==0 && ok[y]==0)
    {
        ok[x]=x;
        ok[y]=x;
        v[x].push_back(x);
        v[x].push_back(y);
    }
    else
    {
        if(ok[x]!=0 && ok[y]==0)
        {
            ok[y]=ok[x];
            v[ok[x]].push_back(y);
        }
        else
        {
            if(ok[x]==0 && ok[y]!=0)
            {
                ok[x]=ok[y];
                v[ok[y]].push_back(x);
            }
            else
            {
                if(ok[x]!=0 && ok[y]!=0 && ok[y]!=ok[x])
                {
                    int ky;
                    ky=ok[y];
                    for(int i=0;i<v[ky].size();i++)
                    {
                        v[ok[x]].push_back(v[ky][i]);
                        ok[v[ky][i]]=ok[x];
                    }
                }
            }
        }
    }
}

void bushdid911(int x, int y)
{
    if(ok[x]==ok[y])
        g<<"DA"<<"\n";
    else
        g<<"NU"<<"\n";
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>type>>x>>y;
        if(type==1)
            verok(x,y);
        else
            bushdid911(x, y);
    }
    f.close();
    g.close();
    return 0;
}