破坏连通性(找连通点)

7-55 分而治之 (25分)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int N,M,a,b,k,vis[10010];
vector<int> v[10010];
bool isdown(int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<v[i].size();j++){
            if(vis[i]==0&&vis[v[i][j]]==0)
                return false;
        }
    }
    return true;
}
int main(){
    scanf("%d %d",&N,&M);
    for(int i=0;i<M;i++){
        scanf("%d %d",&a,&b);
        //建立双向关系
        v[a].push_back(b);
        v[b].push_back(a);
 
    }
    int t;
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        memset(vis,0,sizeof(vis));
        scanf("%d",&k);
        for(int j=0;j<k;j++){
            scanf("%d",&a);
            vis[a]=1;
        }
        if(isdown(N)==true){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    return 0;
}

7-37 红色警报 (25分)

发布了13 篇原创文章 · 获赞 1 · 访问量 135

猜你喜欢

转载自blog.csdn.net/safafs/article/details/105703271
今日推荐