码迷,mamicode.com
首页 > 其他好文 > 详细

Tarjan-割点

时间:2017-09-28 11:39:14      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:ret   bool   name   oid   dfs   cto   push   als   main   

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#define ALL(v) v.begin(),v.end()
using namespace std;
int t[100005],lowlink[100005],step;
vector<int> mp[100005];
bool ans[100005]; 
void dfs(int now,int fa){
int child=0;
    step++;
    t[now]=step;
    lowlink[now]=step;
    for(int i=0;i<mp[now].size();i++)
        if(!t[mp[now][i]]){
            child++;
            dfs(mp[now][i],now);
            lowlink[now]=min(lowlink[now],lowlink[mp[now][i]]);
            if(lowlink[mp[now][i]]>=t[now])ans[now]=true; 
        }
        else
            if(mp[now][i]!=fa)
                lowlink[now]=min(lowlink[now],t[mp[now][i]]);
    if(child==1&&fa<0)ans[now]=false;
}
int main(){
int n,m;
    ios::sync_with_stdio(false);
    cin>>n>>m;
    while(m--){
        int a,b;
        cin>>a>>b;
        mp[a].push_back(b);
        mp[b].push_back(a);
    }
    for(int i=1;i<=n;i++)
        if(!t[i])
            dfs(i,-1);
    int N=0;
    for(int i=1;i<=n;i++)
        if(ans[i])N++;
    cout<<N<<endl;
    for(int i=1;i<=n;i++)
        if(ans[i])
            cout<<i<<‘ ‘;
    return 0;
}

  

Tarjan-割点

标签:ret   bool   name   oid   dfs   cto   push   als   main   

原文地址:http://www.cnblogs.com/HC-LittleJian/p/7605583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!