L2-025 分而治之(团体程序设计天梯赛-练习集)

link

#include <bits/stdc++.h>

using namespace std;

const int N = 10010;

int n, m;
vector<int> g[N];
int deg[N], backup[N];

void check(){
    for(int i = 1; i <= n; ++i){
        if(backup[i] > 0){
            cout << "NO" << endl;
            return ;
        }
    }
    cout << "YES" << endl;
    return ;
}

signed main(){
    cin >> n >> m;
    for(int i = 1; i <= m; ++i){
        int a, b; cin >> a >> b;
        g[a].push_back(b), g[b].push_back(a);
        deg[a]++, deg[b]++;
    }

    int k; cin >> k;
    while(k--){
        memcpy(backup, deg, sizeof(deg));
        int np; cin >> np;
        for(int i = 0; i < np; ++i){
            int v; cin >> v;
            backup[v] = 0;
            for(int j = 0; j < g[v].size(); ++j){
                int t = g[v][j];
                --backup[t];
            }
        }
        check();
    }

    
    return 0;
}
posted @ 2025-03-06 20:07  awei040519  阅读(6)  评论(0)    收藏  举报