分而治之
题目详情 - 7-12 分而治之 (25 分) (pintia.cn)
刚开始确实题目没读懂...
也就是那么多城市给你打,打完之后如果还有连通的城市就失败,否则成功
#include<iostream> #include<vector> #include<cstring> using namespace std; const int N=10010; vector<int> v[N]; bool st[N]; int n,m; int check() { for(int i=1;i<=n;i++) { for(int j=0;j<v[i].size();j++) { if(!st[i]&&!st[v[i][j]]) return -1; } } return 1; } int main(){ cin>>n>>m; while(m--) { int a,b; cin>>a>>b; v[a].push_back(b); v[b].push_back(a); } int Q; cin>>Q; while(Q--) { memset(st,0,sizeof(st)); int k,x; cin>>k; for(int i=1;i<=k;i++) { cin>>x; st[x]=true;//被攻下来是1 } int t=check(); if(t==-1) cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }
还有就是把每一个城市的出度算出来,攻下来一个就减1,然后如果一个城市的出度不等于1,那就失败,否则成功
还有并查集的做法
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号