Pagini recente » Cod sursa (job #897557) | Istoria paginii utilizator/bolovannn | Cod sursa (job #1609170)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
int n, m, card[nmax], parent[nmax];
vector <int> G[nmax];
void set_value(){
for(int i=1; i<=n; i++)
parent[i] = i;
for(int i=1; i<=n; i++)
card[i] = 1;
}
void set_parent(int padre, int child){
int c;
G[padre].push_back(child);
parent[child] = padre;
card[padre] += card[child];
card[child] = 0;
for(int i=G[child].size()-1; i>=0; i--){
c = G[child][i];
G[child].pop_back();
G[padre].push_back(c);
parent[c] = padre;
}
}
void solve(){
int p, x, y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> m;
set_value();
for(int i=1; i<=m; i++){
f >> p >> x >> y;
if(p == 1){
if(card[x] >= card[y])
set_parent(x, y);
else
set_parent(y, x);
}
if(p == 2){
if(parent[x] == parent[y])
g << "DA\n";
else
g << "NU\n";
}
}
}
int main()
{
solve();
return 0;
}