• D. 0-1 MST 题解(补图的联通块)


    题目链接

    题目思路

    仔细分析下就会发现,题目的答案就是补图的连通块个数-1

    主要是如何求补图的连通块数量是个问题

    要枚举没有加入联通块的点来操作

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    int n,m;
    set<int> se;
    bool vis[maxn];
    unordered_map<int,int> ump[maxn];
    void dfs(int u){
        vector<int> vec;
        for(auto x:se){
            if(vis[x]) continue;
            if(ump[u].count(x)) continue;
            vec.push_back(x);
        }
        for(auto x:vec){
            vis[x]=1;
            se.erase(x);
        }
        for(auto x:vec){
            dfs(x);
        }
    }
    signed main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            se.insert(i);
        }
        for(int i=1,a,b;i<=m;i++){
            scanf("%d%d",&a,&b);
            ump[a][b]=ump[b][a]=1;
        }
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(vis[i]) continue;
            se.erase(i);
            vis[i]=1;
            cnt++;
            dfs(i);
        }
        printf("%d
    ",cnt-1);
        return 0;
    
    }
    
    
    
    不摆烂了,写题
  • 相关阅读:
    day39
    day36
    day35
    day34
    深入理解css的margin
    git使用
    java常见的分页实现方式
    jquery常识
    与border不得不说的故事
    测试效果
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15406658.html
Copyright © 2020-2023  润新知