zoukankan      html  css  js  c++  java
  • Codeforces E

    E - Connected Components?

    思路:

    补图bfs,将未访问的点存进set里

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int N=2e5+5;
    bool vis[N];
    int head[N];
    int a[N];
    int cnt=0,ans=0;
    struct edge{
        int to,next;
    }edge[N*2];
    inline add_edge(int u,int v){
        edge[cnt].to=v;
        edge[cnt].next=head[u];
        head[u]=cnt++;
    }
    inline bfs(int n){
        set<int>s;
        set<int>st;
        queue<int>q;
        for(int i=1;i<=n;i++){
            s.insert(i);
        }
        for(int i=1;i<=n;i++){
            if(!vis[i]){
                s.erase(i),q.push(i),vis[i]=true,a[++ans]++;
                while(!q.empty()){
                    int u=q.front();
                    q.pop();
                    for(int j=head[u];~j;j=edge[j].next){
                        int v=edge[j].to;
                        if(s.count(v)==0)continue;
                        s.erase(v);
                        st.insert(v);
                    }
                    for(set<int>::iterator it=s.begin();it!=s.end();it++){
                        if(!vis[*it])q.push(*it),vis[*it]=true;
                        a[ans]++;
                    }
                    s.swap(st);
                    st.clear();
                }
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n,m,u,v;
        mem(head,-1);
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>u>>v;
            add_edge(u,v);
            add_edge(v,u);
        }
        bfs(n);
        sort(a+1,a+1+ans);
        cout<<ans<<endl;
        for(int i=1;i<=ans;i++)cout<<a[i]<<' ';
        cout<<endl;
        return 0;
    } 
  • 相关阅读:
    pygame--颜色变化
    pyQt绘图
    pyqt布局管理器
    java执行shell/cmd命令
    word公式编辑器公式
    pygame绘制文本
    2.add two number
    eltwise层
    crop层
    fcn
  • 原文地址:https://www.cnblogs.com/widsom/p/8422713.html
Copyright © 2011-2022 走看看