题意
给一个图,每个点的出度为1,每个点的权值为1或者2。给Q个询问,问是否能找到一条路径的权值和M。
思路
由于每个点的出度为1,所以必然存在环。又因为c[i]只能取1或者2,可以组成任意值,所以只要有c[i] == 1 就可以造成任何数。没1时能得到任意偶数
代码
[cpp]
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#define MID(x,y) ((x+y)/2)
#define MEM(a,b) memset(a,b,sizeof(a))
#define REP(i, begin, end) for (int i = begin; i <= end; i ++)
using namespace std;
typedef long long LL;
typedef vector <int> VI;
typedef set <int> SETI;
typedef queue <int> QI;
typedef stack <int> SI;
const int maxn = 100005;
int t[maxn], c[maxn];
int main(){
//freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
int n, q;
while(scanf("%d %d", &n, &q) != EOF){
REP(i, 1, n) scanf("%d", &t[i]);
bool flag = false;
REP(i, 1, n){
scanf("%d", &c[i]);
if (c[i] == 1) flag = true;
}
int maxn_m = 0;
REP(i, 1, q){
int tmp;
scanf("%d", &tmp);
if (tmp <= 0){
puts("NO");
}
else if (tmp % 2 == 0){
puts("YES");
}
else{
if (flag){
puts("YES");
}
else{
puts("NO");
}
}
}
}
return 0;
}
[/cpp]