92pts求助!!!第11个点WA了 qwq
查看原帖
92pts求助!!!第11个点WA了 qwq
400593
wuyiduo楼主2022/2/27 20:51
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10;
const int M=2e5+10;
struct Edge{
	int v,next;
}e[M*2];
int n,m,cnt,head[N],num[N],low[N],x,y,tim,root,ans,answer[N];
bool flag[N];
void add(int u,int v){
	e[++cnt].v=v;
	e[cnt].next=head[u];
	head[u]=cnt;
}
void dfs(int u,int fa){
	int child=0;
	num[u]=++tim;
	low[u]=tim;
	for(int i=head[u];i;i=e[i].next){
		int to=e[i].v;
		if(to==fa) continue;
		if(num[to]==0){
			child++;
			dfs(to,u);
			low[u]=min(low[u],low[to]);
			if(low[to]>=num[u]&&u!=root) flag[u]=1;
			if(u==root&&child==2) flag[u]=1;
		}
		else low[u]=min(low[u],num[to]);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		scanf("%d%d",&x,&y);
		if(!root) root=x;
		add(x,y);
		add(y,x);
	}
	dfs(root,0);
	for(int i=1;i<=n;i++) if(flag[i]) answer[++ans]=i;
	printf("%d\n",ans);
	for(int i=1;i<=ans;i++) printf("%d ",answer[i]);
	return 0;
}
2022/2/27 20:51
加载中...