L2-025. 分而治之
题意:
题目给出N个城市M条路,然后决定攻击Np
个相应城市,让你判断剩余的城市之间不存在通路。
分析:
首先城市间通路表示可以用邻接矩阵进行初始化,然后用map映射来标记已被攻击的城市,最后循环遍历判断是否还有连通的两个城市
代码:
#include<iostream> #include<map> using namespace std; const int maxn=10010; struct node{ int x,y; }edge[maxn]; int vis[maxn]; int main(){ int n,m; cin>>n>>m; for(int i=0;i<m;i++){ cin>>edge[i].x>>edge[i].y; } int k,t,city; cin>>k; for(int i=0;i<k;i++){ map<int,int> mp; cin>>t; for(int j=0;j<t;j++){ cin>>city; mp[city]=1; } int j=0; for(j=0;j<m;j++){ if(mp[edge[j].x]!=1&&mp[edge[j].y]!=1){ cout<<"NO"<<endl; break; } } if(j>=m){ cout<<"YES"<<endl; } } return 0; }