MLE求助
查看原帖
MLE求助
638942
Yzh20240706楼主2023/1/4 20:16

或许我是第一个MLE的……

#include<bits/stdc++.h>
#define re register
using namespace std;
int n,m,e[20010][20010],root,num[20010],low[20010],flag[20010],index1;
int x,y;
int ans;

void dfs(int cur,int father){
	int child=0;
	index1++;
	num[cur]=index1;
	low[cur]=index1;
	for(re int i=1;i<=n;i++){
		if(e[cur][i]){
			if(!num[i]){
				child++;
				dfs(i,cur);
				low[cur]=min(low[cur],low[i]);
				if(cur!=root&&low[i]>=num[cur]){
					if(!flag[cur]){
						flag[cur]=1;
						ans++;
					}
				}
				if(cur==root&&child==2){
					if(!flag[cur]){
						flag[cur]=1;
						ans++;
					}
				}
			}
			else if(i!=father){
				low[cur]=min(low[cur],num[i]);
			}
		}
	}
	return;
}

int main(){
	scanf("%d%d",&n,&m);
	for(re int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		e[x][y]=1;
		e[y][x]=1;
	}
	root=1;
	dfs(1,root);
	printf("%d\n",ans);
	for(re int i=1;i<=n;i++){
		if(flag[i]){
			printf("%d ",i);
		}
	}
	return 0;
}
2023/1/4 20:16
加载中...