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);
    }
    
  • 相关阅读:
    POJ 1001 Exponentiation
    POJ 2105 IP Address
    条款1:视C++为一个语言联邦
    条款2:尽量使用const ,enum,inline替换define
    走台阶问题
    Oracle之分页问题
    Oracle之子查询:Top-N问题
    Facade——外观模式
    PROXY——代理模式
    C++ 内联函数
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262952.html
Copyright © 2011-2022 走看看