56tps qwq
查看原帖
56tps qwq
222431
Atlantic_C929楼主2024/8/12 16:50

wa on #4 #6 #10 #11 #12

QWQ

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,t,ans=0,en=1,cnt=0;
struct POINT
{
	int head,dfn,low,flag=0;
}p[200010];
struct EDGE
{
	int nxt,num;
}e[2000010];
int addline(int x,int y)
{
	e[en].num=y;
	e[en].nxt=p[x].head;
	p[x].head=en;
	en++;
	return 0;
}
int dfs(int now,int fa)
{
	p[now].dfn=p[now].low=++cnt;
	int son=0;
	for(int i=p[now].head;i;i=e[i].nxt)
	{
		if(p[e[i].num].dfn==0)
		{
			dfs(e[i].num,now);
			son++;
			p[now].low=min(p[i].low,p[e[i].num].low);
			if(p[e[i].num].low>=p[now].dfn && now!=t)
			{
				ans+=!p[now].flag;
				p[now].flag=1;
			}
		}
		else
		{
			if(e[i].num!=fa)
				p[now].low=min(p[now].low,p[e[i].num].dfn);
		}
	}
	if(son>=2 && now==t)
	{
		ans+=!p[now].flag;
		p[now].flag=1;
	}
	return 0;
}
int main()
{
//	freopen("P3388_4.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		addline(x,y);
		addline(y,x);
	}
	for(int i=1;i<=n;i++)
		if(p[i].dfn==0)
		{
			t=i;
			cnt=0;
			dfs(i,0);
		}
	printf("%d\n",ans);
	ans=0;
	for(int i=1;i<=n;i++)
		if(p[i].flag==1)
			printf("%d ",i);
	return 0;
}
2024/8/12 16:50
加载中...