标签: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;
}
标签:ret bool name oid dfs cto push als main
原文地址:http://www.cnblogs.com/HC-LittleJian/p/7605583.html