求助最后一个点RE
查看原帖
求助最后一个点RE
323989
Vector_Mingfan楼主2021/7/23 08:42
#include<cstdio>
#include <iostream>
#define N 500005
using namespace std;
int g[5005][5005],low[N],dfn[N],prt[N],n,cnt,s,t,ans=N,x,y,maxn=N;
void work(int x) {
	if (x==s)return;
	if (low[x]>=dfn[prt[x]]&&prt[x]!=s&&prt[x]<ans) ans=prt[x];
	work(prt[x]); 
}
void dfs(int now) {
	cnt++;
	low[now]=dfn[now]=cnt;
	for (int i=1;i<=n;i++) {
		if (g[now][i]&&prt[now]!=i) {
			if (!dfn[i]) {prt[i]=now; dfs(i); low[now]=min(low[now],low[i]);}
			else low[now]=min(low[now],dfn[i]);
		}
	}
}
int main() {
	scanf("%d",&n);
	while (scanf("%d %d",&x,&y)) {
		if(!(x+y))break;
		g[x][y]=g[y][x]=1;
	}
	scanf("%d %d",&s,&t);
	dfs(s); work(t);
	if (ans<maxn) {printf("%d\n",ans); return 0;}
	else printf("No solution\n");
}
2021/7/23 08:42
加载中...