AcWing 854. Floyd求最短路
原题链接
简单
作者:
wangyj
,
2020-10-18 18:30:59
,
所有人可见
,
阅读 311
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int BIG=1e9;
int n,m,Q,d[210][210],i,j,k;
void floyd()
{
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
int main()
{
int a,b,c;
scanf("%d%d%d",&n,&m,&Q);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i == j)d[i][j]=0;
else d[i][j]=BIG;
while(m--){
scanf("%d%d%d",&a,&b,&c);
d[a][b]=min(d[a][b],c);
}
floyd();
while (Q--){
scanf("%d%d",&a,&b);
if(d[a][b]>BIG/2)puts("impossible");
else printf("%d\n",d[a][b]);
}
return 0;
}