Cod sursa(job #1333569)

Utilizator rsteliRadu Stelian rsteli Data 3 februarie 2015 12:46:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

#define nmax 100010

int n,m,c[nmax],comp,tip,x,y;
vector<int> g[nmax];

void dfs(int nod)
{
    vector<int>::iterator it;
    c[nod]=comp;
    for (it=g[nod].begin();it!=g[nod].end();it++)
        if (c[*it]!=comp)
            dfs(*it);
}

void uneste(int nod1,int nod2)
{
    comp=c[nod1];
    g[nod1].push_back(nod2);
    g[nod2].push_back(nod1);
    dfs(nod2);
}

int main()
{
    int i,j;
    cin>>n>>m;
    for (i=1;i<=n;i++)
        c[i]=i;
    for (i=1;i<=m;i++)
    {
        cin>>tip>>x>>y;
        if (tip==1)
            uneste(x,y);
        else
        {
            if (c[x]==c[y]) cout<<"DA"<<'\n';
            else cout<<"NU"<<'\n';
        }
    }
}