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();
}



Download