感觉没啥问题。
为什么这个代码样例数据输出
2
1 5
连样例都过不了
实在查不出问题。所以求助: 下面是代码
#include<set>
#include<map>
#include<stack>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
#include<stdio.h>
#include<math.h>
#include<istream>
#include<string.h>
#include<ostream>
#include<iostream>
#include<algorithm>
using namespace std;
int read(){
int f=1,x=0;char ch = getchar();
while(!isdigit(ch)){
if(ch=='-' )f=-1;
ch=getchar();
}
while(isdigit(ch)){x=x*10+(ch-'0');ch=getchar();}
return f*x;
}
struct Edge{int to,next;}edge[200010];
int dfn[100005],low[100005],head[100005],cnt,n,m,ans,Dfn,i,j,u,v;
bool pd[100005];
void build(int x,int y){
++cnt;
edge[cnt].to=y;
edge[cnt].next=head[x];
head[x]=cnt;
}
void tarjan(int now,int father,int son){
Dfn++;
dfn[now]=low[now]=Dfn;
for(int ii=head[now];ii;ii=edge[ii].next){
if(!dfn[edge[ii].to]){
tarjan(edge[ii].to,father,0);
low[now]=min(low[now],low[edge[ii].to]);
if(low[edge[ii].to]>=dfn[now]&&edge[ii].to!=father)pd[now]=true;
if(now==father)son++;
}
low[now]=min(low[now],dfn[edge[ii].to]);
}
if((son>1)&&(now==father))pd[now]=true;
}
int main(){
memset(dfn,0,sizeof(dfn));
memset(head,0,sizeof(head));
n=read();m=read();
for(i=1;i<=m;i++){
cin>>u>>v;
build(u,v);build(v,u);
}
for(i=1;i<=n;i++)
if(!dfn[i])tarjan(i,i,0);
for(i=1;i<=n;i++)
if(pd[i])ans++;
cout<<ans<<endl;
for(i=1;i<=n;i++)
if(pd[i])cout<<i<<" ";
return 0;
}