Cod sursa(job #937012)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 9 aprilie 2013 13:07:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
#include<vector>
using namespace std;
const int NMAX = 100005;
int n,m,i,op,x,y,Father[NMAX];
vector<int> Set[NMAX];
void unite(int Where,int From)
{
    for(vector<int>::iterator it=Set[From].begin();it!=Set[From].end();it++)
    {
        Father[*it]=Where;
        Set[Where].push_back(*it);
    }
    Set[From].clear();
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        Set[i].push_back(i);
        Father[i]=i;
    }
    for(;m;m--)
    {
        scanf("%d%d%d",&op,&x,&y);
        if(op==1)
        {
            if(Set[Father[x]].size()<Set[Father[y]].size()) unite(Father[y],Father[x]);
            else unite(Father[x],Father[y]);
        }
        else
        {
            if(Father[x]==Father[y]) printf("DA\n");
            else printf("NU\n");
        }
    }
    return 0;
}