Cod sursa(job #1735114)

Utilizator TimoteiCopaciu Timotei Timotei Data 29 iulie 2016 00:35:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nMax 100005
using namespace std;
ofstream fout("disjoint.out");
int n, m;
typedef struct {
    int rad, hMax;
} nod;
nod node[nMax];
vector <int> v[nMax];
void dfs(int x, int y){
    for(int i = 0; i < v[x].size(); ++i){
        node[v[x][i]].rad = y;
        dfs(v[x][i], y);
    }
}
void solve(int x, int y)
{
  if(node[x].hMax < node[y].hMax)
    swap(x, y);
    v[x].push_back(y);
    node[x].hMax = max(node[x].hMax, node[y].hMax + 1);
    node[y].rad = x;
    dfs(y, x);
}
void write(int x, int y)
{
   if(node[x].rad == node[y].rad)
        fout << "DA\n";
     else
        fout << "NU\n";
}
void read()
{   int x, y, tip;
    ifstream fin("disjoint.in");
    fin >> n >> m;
    for(int i = 1; i <= n; ++i)
        node[i].hMax = 0, node[i].rad = i;
    for(int i = 1; i <= m; ++i){
        fin >> tip >> x >> y;
        if(tip ==  1) solve(node[x].rad, node[y].rad);
          else write(x, y);
    }
}
int main()
{
    read();
    return 0;
}