#include <iostream> #include <algorithm> #include <cstdio> #include <string> #include <cstring> #include <cstdlib> #include <map> #include <vector> #include <set> #include <queue> #include <stack> #include <cmath> using namespace std; #define mem(s,t) memset(s,t,sizeof(s)) #define pq priority_queue #define pb push_back #define fi first #define se second #define ac return 0; #define ll long long #define cin2(a,n,m) for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; #define rep_(n,m) for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) #define rep(n) for(int i=1;i<=n;i++) #define test(xxx) cout<<" Test " <<" "<<xxx<<endl; #define TLE std::ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cout.precision(10); #define lc now<<1 #define rc now<<1|1 #define ls now<<1,l,mid #define rs now<<1|1,mid+1,r #define half no[now].l+((no[now].r-no[now].l)>>1) #define ll long long #define inf 0x3f3f3f3f #define mod 1000000007 const int mxn = 1e5+10; int n,m,k,ans,col,t,flag,vis[mxn]; ll dp[mxn],pro[mxn]; string str,ch ; map<char,int>mp; set<int>st,G[mxn]; pair <int,int> pa[mxn]; bool cmp(pair<int,int>x,pair<int,int>y) { return x.first>y.first; } void BFS(int x) { queue<int>q; q.push(x); st.erase(x); while(q.size()) { int now = q.front(); q.pop(); if(vis[now]) continue; vis[now] = 1 ; for(set<int>::iterator it=st.begin(); it!=st.end();) { int cnt = *it; it++;//set和vector这些容器不能边修改边遍历,需要在修改之前将迭代器往后加一 if(G[now].find(cnt)==G[now].end()) { q.push(cnt); st.erase(cnt); } } } } int main() { cin>>n>>m; for(int i=1; i<=n; i++) st.insert(i); for(int i=1; i<=m; i++) { cin>>col>>ans; G[col].insert(ans); G[ans].insert(col); } ans = 0; for(int i=1; i<=n; i++) { if(!vis[i]) { BFS(i); ans++; } } cout<<ans-1<<endl; return 0; }
Codeforces Round #599 (Div. 2) D. 0-1 MST (补图连通块计数)
猜你喜欢
转载自www.cnblogs.com/Shallow-dream/p/11853785.html
今日推荐
周排行