L2-025 分而治之 (25 分)

水~。

将给定的点标记已访问,判断其他点是否还存在未标记访问的邻接点。若存在,说明剩余的点不孤立;否则剩余的全为孤立点。

const int N=10010;
vector<int> g[N];
bool vis[N];
int n,m,q;

bool dfs(int u)
{
    for(int i=0;i<g[u].size();i++)
    {
        int j=g[u][i];
        if(!vis[j]) return true;
    }
    return false;
}

int main()
{
    cin>>n>>m;

    while(m--)
    {
        int a,b;
        cin>>a>>b;
        g[a].pb(b);
        g[b].pb(a);
    }

    cin>>q;
    while(q--)
    {
        int k;
        cin>>k;
        vector<int> node(k);
        for(int i=0;i<k;i++)
        {
            cin>>node[i];
            vis[node[i]]=true;
        }

        bool ok=true;
        for(int i=1;i<=n;i++)
            if(!vis[i] && dfs(i))
            {
                ok=false;
                break;
            }

        if(ok) puts("YES");
        else puts("NO");

        for(int i=0;i<k;i++)
            vis[node[i]]=false;
    }

    //system("pause");
    return 0;
}
posted @ 2021-04-19 14:50  Dazzling!  阅读(74)  评论(0编辑  收藏  举报