Pagini recente » Cod sursa (job #636028) | Cod sursa (job #2457423) | Cod sursa (job #4415) | Cod sursa (job #3126534) | Cod sursa (job #633159)
Cod sursa(job #633159)
#include<stdio.h>
#include<ctime>
#include<vector>
#define Check() if (++pozitie == 10005){fread (buff, 1, 10005, stdin); pozitie = 0;}
using namespace std;
vector <int> tata, rang;
int pozitie;
char buff[10005];
void Citeste(int &nr){
nr = 0;
while (buff[pozitie] < '0' || buff[pozitie] > '9')
Check();
while ('0' <= buff[pozitie] && buff[pozitie] <= '9'){
nr = nr * 10 + (buff[pozitie] - '0');
Check();
}
}
int Find(int x){
if (tata[x] == x) return x;
else{
tata[x] = Find(tata[x]);
return tata[x];
}
}
void Merge (int &x, int &y){
int xRoot = Find(x), yRoot = Find(y);
if (xRoot == yRoot) return;
(rang[xRoot] >= rang[yRoot]) ? tata[yRoot] = xRoot : tata[xRoot] = yRoot;
if (rang[xRoot] = rang[yRoot]) rang[xRoot]++;
}
int main(){
long start, stop;
start = clock();
int n, m, i, tip, x, y;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
Citeste(n); Citeste(m);
for (i = 0; i <= n; i++) tata.push_back(i);
rang.assign(n+1, 1);
for (i = 1; i <= m; i++){
Citeste(tip); Citeste(x); Citeste(y);
if (tip == 1) Merge(x, y);
else Find(y) == Find(x) ? printf("DA\n") : printf("NU\n");
}
stop = clock();
printf("%.12lf", 1.0*(stop - start)/CLOCKS_PER_SEC);
return 0;
}