zoukankan      html  css  js  c++  java
  • cf 01mst

    https://codeforces.com/contest/1243/problem/D

    题意是说:给一个图对吧,然后给出点与点的关系,边权为1,没有给出的点与点关系,则这两点边权为0,求出最小生成树权值。

    因为0边也可以作为权值,而题目中边数多,而且我们知道肯定是优选边为0的,所以只需找出边权为0的联通块,这些联通块边权都是0,不同联通块之间用边权为1的连起来,也就是需要块数-1的边。

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int N=1e5+10;
    set<int>G[N],s;
    int vis[N];
    void bfs(int x)
    {
        queue<int>q;
        q.push(x);
        s.erase(x);
        while(q.size()>0)
        {
            int y=q.front();
            q.pop();
            if(vis[y])
                continue;
            vis[y]=1;
    
            for(auto it=s.begin();it!=s.end();)
            {
                int v=*it;
                ++it;
                if(G[y].find(v)==G[y].end())
                {
                    q.push(v);//cout<<"-";
                    s.erase(v);
                }
            }
        }
    }
    int main()
    {
       int n,m;
       cin>>n>>m;
       for(int i=1;i<=n;i++)
       {
           s.insert(i);
       }
       for(int i=1;i<=m;i++)
       {
           int x,y;
           cin>>x>>y;
           G[x].insert(y);
           G[y].insert(x);
       }
       int ans=0;
    
       for(int i=1;i<=n;i++)
       {
           if(!vis[i])
           {
               bfs(i);
               ans++;
           }
       }
       cout<<ans-1<<"\n";
        return 0;
    }
    

      

  • 相关阅读:
    数据库ACID
    tcp ip detatils
    process vs thread
    C++ virtual descructor
    static_cast dynamic_cast const_cast reinterpret_cast总结对比
    Meta Programming
    C++ traits
    c++内存管理
    洛谷 P4136 谁能赢呢?
    洛谷 P1166 打保龄球
  • 原文地址:https://www.cnblogs.com/hgangang/p/11910870.html
Copyright © 2011-2022 走看看