Cod sursa(job #2485704)

Utilizator drknss_Hehe hehe drknss_ Data 1 noiembrie 2019 22:04:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(a) (a).begin(), (a).end()
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define forn(i,a,b) for (int i = a; i <= b; i++)
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define rc(s) return cout<<s,0
#define rcc(s) cout<<s,exit(0)
#define er erase
#define in insert
#define pi pair <int, int>
#define pii pair <pi, pi>
# define sz(x) (int)((x).size())
#define inf 1000000000
const ll mod = 1000000007;
int t,n,x,y,c,a[100005];
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int find(int i){
	while(a[i]!=i){
		a[i]=a[a[i]];
		i=a[i];
	}
	return i;
}
void unionn(int xx,int yy){
	a[find(xx)]=a[find(yy)];
}

int32_t main(){
ios_base::sync_with_stdio(0); cin.tie(); cerr.tie(); cout.tie();
	in>>n>>t;
	forn(i,1,n)a[i]=i;
	while(t--){
		in>>c>>x>>y;
		if(c==1){
			unionn(x,y);
		}else{
			if(find(x)==find(y))out<<"DA\n";else out<<"NU\n";
		}
	}
return 0;
}