PTA 分而治之 重新開始
阿新 • • 發佈:2018-12-13
分而治之 (25 分) 分而治之,各個擊破是兵家常用的策略之一。在戰爭中,我們希望首先攻下敵方的部分城市,使其剩餘的城市變成孤立無援,然後再分頭各個擊破。為此參謀部提供了若干打擊方案。本題就請你編寫程式,判斷每個方案的可行性。 輸入格式: 輸入在第一行給出兩個正整數 N 和 M(均不超過10 000),分別為敵方城市個數(於是預設城市從 1 到 N 編號)和連線兩城市的通路條數。隨後 M 行,每行給出一條通路所連線的兩個城市的編號,其間以一個空格分隔。在城市資訊之後給出參謀部的系列方案,即一個正整數 K (≤ 100)和隨後的 K 行方案,每行按以下格式給出: Np v[1] v[2] ... v[Np] 其中 Np 是該方案中計劃攻下的城市數量,後面的系列 v[i] 是計劃攻下的城市編號。 輸出格式: 對每一套方案,如果可行就輸出YES,否則輸出NO。 輸入樣例: 10 11 8 7 6 8 4 5 8 4 8 1 1 2 1 4 9 8 9 1 1 10 2 4 5 4 10 3 8 4 6 6 1 7 5 4 9 3 1 8 4 2 2 8 7 9 8 7 6 5 4 2 輸出樣例: NO YES YES NO NO
恥辱。從頭再來吧。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct Node { int a,b; }rd[10005]; int n,m; int main() { scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d",&rd[i].a,&rd[i].b); } int k,np,flag,g[10005],t; scanf("%d",&k); while(k--) { scanf("%d",&np); flag=0; memset(g,0,sizeof(g)); for(int i=0;i<np;i++) { scanf("%d",&t); g[t]=1; } for(int i=0;i<m;i++) { if(g[rd[i].a]==0&&g[rd[i].b]==0)///////// { flag=1; break; } } printf("%s\n",flag?"NO":"YES"); } return 0; }