36分求助qwq
查看原帖
36分求助qwq
210122
coconutt_楼主2020/8/10 15:00

这是一个可爱的链接

#include<bits/stdc++.h>
using namespace std;
const int maxn=10050;
vector<int> G[maxn];
int n,m,now;
int dfn[maxn],low[maxn];
bool cul[maxn];
int ans=0;
void insert(int a,int b){
	G[a].push_back(b);
	G[b].push_back(a);
}


void tarjan(int u,int f){
	dfn[u]=low[u]=++now;
	int son=0;
	for(int i=0;i<G[u].size();i++){
		int v=G[u][i];
		if(v==f){
			continue;
		}
		if(!dfn[v]){
			tarjan(v,u);
			low[u]=min(low[u],low[v]);
			if(low[v]>=dfn[u]&&u!=1){
				cul[u]=1;
			}
			if(u==1){
				son++;
			}
		}
		low[u]=min(low[u],dfn[v]);
	}
	if(son>=2&&u==1){
		cul[u]=1;
	}
}


int main(){
	cin >> n >> m;
	while(m--){
		int qwq,qwq2;
		cin >> qwq >>qwq2;
		insert(qwq,qwq2);
	}
	tarjan(1,-1);
	for(int i=1;i<=n;i++){
		if(cul[i]){
			ans++;
		}
	}
/*	for(int i=1;i<=n;i++){
		cout << dfn[i] << " " << low[i] << endl;
	}*/
	cout << ans << endl;
	for(int i=1;i<=n;i++){
		if(cul[i]){
			cout << i << " ";
		}
	}
	return 0;
}
2020/8/10 15:00
加载中...