C11BC2 - Robin
Tác giả: RR
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <iomanip>
#include <bitset>
#include <complex>
#define FOR(i,a,b) for(int i = a; i <= b; ++i)
#define FORD(i,a,b) for(int i = a; i >= b; --i)
#define REP(i,a) for(int i = 0; i < a; ++i)
#define MP make_pair
#define PB push_back
using namespace std;
int lab[10111];
int getRoot(int u) {
if (lab[u] < 0) return u;
return lab[u] = getRoot(lab[u]);
}
void merge(int u, int v) {
if (u == v) return ;
int x = lab[u] + lab[v];
if (lab[u] < lab[v]) {
lab[u] = x;
lab[v] = u;
}
else {
lab[v] = x;
lab[u] = v;
}
}
int main() {
int n, m; scanf("%d%d", &n, &m);
memset(lab, -1, sizeof lab);
int v, k;
FOR(u,2,n) {
scanf("%d%d", &v, &k);
if (k == 2) continue;
merge(getRoot(u), getRoot(v));
}
int u;
FOR(i,1,m) {
scanf("%d%d", &u, &v);
if (getRoot(u) != getRoot(v)) puts("YES");
else puts("NO");
}
return 0;
}