| 比赛 |
期末考试3 |
评测结果 |
AAAAAAAAAATTTTTTTTTT |
| 题目名称 |
hope I can jump |
最终得分 |
50 |
| 用户昵称 |
RpUtl |
运行时间 |
32.618 s |
| 代码语言 |
C++ |
内存使用 |
4.61 MiB |
| 提交时间 |
2026-02-11 11:39:22 |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=505;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll dis[N],a[N][N];
int n,q,mk[N];
ll dist(int s,int t,int g){
for(int i=1;i<=n;i++)dis[i]=inf,mk[i]=0;
dis[s]=0;
for(int i=1;i<=n;i++){
int p=-1;
for(int j=1;j<=n;j++){
if(j==g)continue;
if(!mk[j]&&(p==-1||dis[j]<dis[p]))p=j;
}
mk[p]=1;
for(int j=1;j<=n;j++){
if(j==g)continue;
if(!mk[j])dis[j]=min(dis[j],dis[p]+a[p][j]);
}
}
return dis[t];
}
int main(){
freopen("hopeicanjump.in","r",stdin);
freopen("hopeicanjump.out","w",stdout);
scanf("%d %d",&n,&q);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%lld",&a[i][j]);
}
}
int s,t,p;
while(q--){
scanf("%d %d %d",&s,&t,&p);
printf("%lld\n",dist(s,t,p));
}
return 0;
}