40pts求助(玄关)
  • 板块P1613 跑路
  • 楼主Hero_Broom
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/28 18:41
  • 上次更新2024/8/28 20:07:45
查看原帖
40pts求助(玄关)
970132
Hero_Broom楼主2024/8/28 18:41
#include<bits/stdc++.h>
using namespace std;
int dis[60][60],t1,t2;
bool is_ok[60][60][70];
int n,m;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) fill(dis[i]+1,dis[i]+n,999999999);
	while(m--){
		scanf("%d%d",&t1,&t2);
		dis[t1][t2]=1;
		is_ok[t1][t2][0]=1;
	}
	for(int p=1;p<=64;p++)
		for(int k=1;k<=n;k++)
			for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
					if(is_ok[i][k][p-1]&&is_ok[k][j][p-1]){
						is_ok[i][j][p]=1;
						dis[i][j]=1;
					}
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
	printf("%d\n",dis[1][n]);
}
2024/8/28 18:41
加载中...