| 比赛 |
期末考试3 |
评测结果 |
WWWWWWEEEEEEEEEEEEEE |
| 题目名称 |
hope I can jump |
最终得分 |
0 |
| 用户昵称 |
梦那边的美好ME |
运行时间 |
2.582 s |
| 代码语言 |
C++ |
内存使用 |
15.63 MiB |
| 提交时间 |
2026-02-11 12:14:15 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll INF=1e18;
int n,q;
ll a[250][250];
ll b[250][250][250];
ll c[250][250][250];
int main(){
freopen("hopeicanjump.in","r",stdin);
freopen("hopeicanjump.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>q;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
b[0][i][j]=a[i][j];
}
}
for (int k=1;k<=n;++k){
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
ll x=b[k-1][i][j];
ll y=b[k-1][i][k]+b[k-1][k][j];
b[k][i][j]=min(x,y);
}
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
c[n+1][i][j]=a[i][j];
}
}
for (int k=n;k>=1;--k){
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
ll x=c[k+1][i][j];
ll y=c[k+1][i][k]+c[k+1][k][j];
c[k][i][j]=min(x,y);
}
}
}
while (q--){
ll s,t,p;
cin>>s>>t>>p;
ll ans=min(b[p-1][s][t],c[p+1][s][t]);
ll x=INF,y=INF;
for (int k=1;k<=n;++k){
if (k==p) continue;
x=min(x,b[p-1][s][k]+c[p+1][k][t]);
y=min(y,c[p+1][s][k]+b[p-1][k][t]);
}
ans=min(ans,min(x,y));
cout<<ans<<'\n';
}
return 0;
}