Pagini recente » Cod sursa (job #2178428) | Cod sursa (job #106977) | Cod sursa (job #2657268) | Cod sursa (job #1362191) | Cod sursa (job #1695219)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#define NMAX 100005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define pb push_back
using namespace std;
typedef pair<int, int> pii;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int p[NMAX], rang[NMAX];
int findSet(int x);
bool inSameSet(int x, int y);
void unionSet(int x, int y);
int main() {
int n,m,op,x,y,i;
fin>>n>>m;
for(i=1;i<=n;++i) {
p[i]=i;
rang[i]=1;
}
for(i=0;i<m;++i) {
fin>>op>>x>>y;
if(op == 1)
unionSet(x,y);
else{
if(inSameSet(x,y)) fout<<"DA\n";
else fout<<"NU\n";
}
}
return 0;
}
int findSet(int x) {
if(p[x]==x)
return x;
return p[x]=findSet(p[x]);
}
bool inSameSet(int x, int y) {
return findSet(x)==findSet(y);
}
void unionSet(int x, int y) {
if(!inSameSet(x,y)) {
int i=findSet(x),j=findSet(y);
if(rang[i] > rang[j])
p[j]=i;
else {
p[i]=j;
if(rang[i] == rang[j]) ++rang[j];
}
}
}