zoukankan      html  css  js  c++  java
  • 割点板子

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int N=1e5+5,M=1e5+5,INF=1e9+5;
    int n=0,m,u,v;
    struct edge
    {
        int v,ne;
    } e[M<<1];
    int h[N],cnt=0;
    inline void ins(int u,int v)
    {
        cnt++;
        e[cnt].v=v;
        e[cnt].ne=h[u];
        h[u]=cnt;
        cnt++;
        e[cnt].v=u;
        e[cnt].ne=h[v];
        h[v]=cnt;
    }
    int dfn[N],low[N],dfc=0,iscut[N];
    void dfs(int u,int fa)
    {
        dfn[u]=low[u]=++dfc;
        int child=0;
        for(int i=h[u]; i; i=e[i].ne)
        {
            int v=e[i].v;
            if(!dfn[v])
            {
                child++;
                dfs(v,u);
                low[u]=min(low[u],low[v]);
                if(low[v]>=dfn[u]) iscut[u]=1;
            }
            else if(dfn[v]<dfn[u]&&v!=fa) low[u]=min(low[u],dfn[v]);
        }
        if(fa==0&&child==1) iscut[u]=0;
    }
    int main()
    {
        //freopen("D://testdata.in","r",stdin);
        cin>>n>>m;
        for(int i=1; i<=m; i++)
        {
            cin>>u>>v;
            ins(u,v);
        }
        for(int i=1; i<=n; i++) if(!dfn[i]) dfs(i,0);
    
        int ans=0;
        for(int i=1; i<=n; i++) if(iscut[i]) ans++;
        printf("%d
    ",ans);
        for(int i=1; i<=n; i++) if(iscut[i]) printf("%d ",i);
    }
    
  • 相关阅读:
    HTTP方法(转)(学习基础)
    正则表达式 学习手记 111221
    原型模式 学习手记
    分布式事务 MSDTC配置
    Ibatis.Net 学习手记二 缓存
    IIS 7.0 部署MVC
    事务与分布式事务
    Ibatis+MVC 3.0 开发手记
    Ibatis.Net 学习手记一 简单的Demo
    简单工厂 学习手记
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262951.html
Copyright © 2011-2022 走看看