分而治之

题目详情 - 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,那就失败,否则成功

还有并查集的做法

 

posted @   小志61314  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示