记录编号 574763 评测结果 AAAAAAAAAA
题目名称 找最佳通路 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2022-08-13 20:29:40 内存使用 0.00 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 60,M = 3010;
int n,m,u,s,h[N],d[N],tot,v[N];
struct made{
	int ver,nx;
}e[M];
void add(int x,int y){
	tot++;
	e[tot].ver = y,e[tot].nx = h[x],h[x] = tot;
}
void di(){
	memset(d,0x3f,sizeof(d));
	priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
	q.push(make_pair(0,u));
	d[u] = 0;
	while(!q.empty()){
		int x = q.top().second;q.pop();
		v[x] = 1;
		for(int i = h[x];i;i = e[i].nx){
			int y = e[i].ver;
			if(d[y] > d[x] + 1){
				d[y] = d[x] + 1;
				if(!v[y])q.push(make_pair(d[y],y));v[y] = 1;
			}
		}
	}
}
int main(){
	freopen("city.in","r",stdin);
	freopen("city.out","w",stdout);
	scanf("%d%d%d%d",&n,&m,&u,&s);
	for(int i = 1;i <= m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);
	}
	di();
	printf("%d\n",d[s]+1);

	return 0;
}