再做一遍floyed

#include<bits/stdc++.h>
#define R register int
using namespace std;
const int inf=0x3f3f3f3f;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
int n,m,k,a[201][201];
int main()
{
    n=read();m=read();k=read();
    for(R i=1;i<=n;i++)
     for(R j=1;j<=n;j++)
    {
        if(i==j) a[i][j]=0;
        else a[i][j]=inf;
    }
    for(R i=1;i<=m;i++)
    {
        int x=read(),y=read(),z=read();
        a[x][y]=min(a[x][y],z);//存在重边
    }
    for(R k=1;k<=n;k++)
     for(R i=1;i<=n;i++)
      for(R j=1;j<=n;j++)
       a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
    for(R i=1;i<=k;i++)
    {
        int x=read(),y=read();
        if(a[x][y]>=inf/2) printf("impossible\n");
        else printf("%d\n",a[x][y]);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/smartljy/p/11791530.html