zoukankan      html  css  js  c++  java
  • 割点-模板

    洛谷割点模板:https://www.luogu.org/problemnew/show/P3388

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cstdio>
    #include <vector>
    
    using namespace std;
    const int maxn = 100009;
    vector<int>q,mp[maxn];
    int cnt,root,ind;
    int num[maxn],low[maxn],used[maxn];
    void dfs(int cur,int father)
    {
        ind++;
        num[cur]=low[cur]=ind;
        int child=0;
        for(int i=0;i<mp[cur].size();i++)
        {
            int to = mp[cur][i];
            if(num[to]==0)
            {
                child++;
                dfs(to,cur);
                low[cur]=min(low[cur],low[to]);
                //特别注意!有可能在Tarjian时x的儿子有多个!
                   //更新时且都符合条件!故ans被累加多次!注意判重! 
                if(cur!=root&&low[to]>=num[cur])
                    if(used[cur]==0)used[cur]=1,cnt++,q.push_back(cur);
                if(root==cur&&child==2)
                    if(used[cur]==0)used[cur]=1,cnt++,q.push_back(cur);
            }
            else if(to!=father)
            {
                low[cur]=min(low[cur],num[to]);
            }
        }
    }
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            mp[u].push_back(v);
            mp[v].push_back(u);
        }
        for(int i=1;i<=n;i++)
        {
            if(num[i]==0)                //由于所有点不是全部连通的;
                ind=0,root=i,dfs(root,0);
        }
        sort(q.begin(),q.end());
        printf("%d
    ",cnt);
        for(int i=0;i<q.size();i++)
        {
            printf("%d ",q[i]);
        }
        return 0;
    }
  • 相关阅读:
    2020-08-11 题目题解
    N皇后问题
    逆序对(模板)
    归并选择(模板)
    快速选择(模板)
    快速排序(模板)
    vuecli4+elementui实现面包屑
    vue-路由导航(守卫)那些事
    vue-vant中ImagePreview 图片预览正确的打开方式
    Selenium 对表格table处理
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/8519654.html
Copyright © 2011-2022 走看看