L2-1 分而治之 (25 分)
#include<cstdio> #include<iostream> #include<set> using namespace std; const int maxn=1e4+10; int mp[maxn][2]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ scanf("%d%d",&mp[i][0],&mp[i][1]); } int k; scanf("%d",&k); int np,tmp; while(k--){ scanf("%d",&np); set<int> s; while(np--){ scanf("%d",&tmp); s.insert(tmp); } bool flag=true; for(int i=0;i<m;i++){ if(s.find(mp[i][0])==s.end()&&s.find(mp[i][1])==s.end()){ flag=false; break; } } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }