CF1242B 0-1MST(思维)
Posted zhanglichen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1242B 0-1MST(思维)相关的知识,希望对你有一定的参考价值。
题意:
给你一张 n 个点的完全图,其中有 m 条边长度为 1,其余全为 0。问你这张图的最小生成树为多少。
题解:
就是求补图的连通块数量减一,可以用set的count函数来建立补图,具体看代码。
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+100; set<int> g[maxn]; int N,M; set<int> st; int visit[maxn]; set<int> ::iterator it; void bfs (int x) { queue<int> q; st.erase(x); q.push(x); visit[x]=1; while (!q.empty()) { int k=q.front(); q.pop(); for (it=st.begin();it!=st.end();) { int v=*it++;//后面可能要删除,所以先增加 if (g[v].count(k)==0) { //表明与k相连的没有 st.erase(v);//已经访问过了,所以删掉 q.push(v); visit[v]=1; } } } } int main () { scanf("%d%d",&N,&M); for (int i=1;i<=N;i++) st.insert(i); while (M--) { int x,y; scanf("%d%d",&x,&y); g[x].insert(y); g[y].insert(x); } int ans=0; for (int i=1;i<=N;i++) if (!visit[i]) { ans++; bfs(i); } printf("%d ",ans-1); return 0; }
以上是关于CF1242B 0-1MST(思维)的主要内容,如果未能解决你的问题,请参考以下文章
代码源 Div1 - 107#452. 序列操作(思维)CF1198B
[贪心] aw3774. 亮灯时长(思维+后缀和+代码细节+CF1000B)