C11BC2 - Robin
Tác giả: hieult
Ngôn ngữ: C++
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
//include<conio.h>
#define ep 0.000000001
#define maxn 10011
#define oo 1000000000
#define ooo 1ll << 62
//#define mod 111539786
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
#define fi first
#define se second
#define max_size 4
double const PI=4*atan(1);
typedef long long int64;
using namespace std;
typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;
int n, m, u, v, run, f[10011];
bool flag[10011] = {0};
vector<int> V[10011];
void duyet(int x){
f[x] = run;
flag[x] = 1;
for(int i = 0; i < V[x].size(); i++){
if(!flag[V[x][i]]) duyet(V[x][i]);
}
}
int main(){
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 2; i <= n; i++){
scanf("%d %d",&u,&v);
if(v != 2){
V[u].push_back(i);
V[i].push_back(u);
}
}
run = 0;
for(int i = 1; i <= n; i++){
if(!flag[i]){
duyet(i);
run++;
}
}
// for(int i = 1; i <= n; i++) printf("%d ",f[i]); printf("\n");
for(int i = 0; i < m; i++){
scanf("%d %d",&u,&v);
if(f[u]!=f[v]) printf("YES\n");
else printf("NO\n");
}
// getch();
}