就像1、2元人民币可以凑成任意你想要的面值一样。由于一定会有环,只要有C[i] == 1 就可以造成任何数。够坑吧
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std; const int maxe = ;
const int maxn = 1e5+;
const int INF = 0x3f3f3f; int main()
{
int C[maxn],T[maxn];
int N,Q; while(cin>>N>>Q){
bool flag = false;
for(int i=;i<=N;i++) scanf("%d",&T[i]);
for(int i=;i<=N;i++) {scanf("%d",&C[i]); if(C[i] == ) flag = true; } int M;
for(int i=;i<=Q;i++){
scanf("%d",&M);
if(M <= ) printf("NO\n");
else{
if(flag) printf("YES\n");
else{
if(M%) printf("NO\n");
else printf("YES\n");
}
}
}
} }