Floyd算法是一种用于多源点的最短路算法,可以算负权边,但是不能有自环负权边
void floyd(){ //动态规划
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
s[i][j]=min(s[i][j],s[i][k]+s[k][j]);
}
}
}
}
cin>>n>>m>>a; //n个点,m条变,a次询问
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)s[i][j]=0; //自己到自己就0
else s[i][j]=0x3f3f3f3f; //其他的设置为最大值
}
}
while(m--){
cin>>b>>c>>d;
s[b][c]=min(s[b][c],d); //可能重边
}
floyd();
while(a--){
cin>>b>>c;
if(s[b][c]>0x3f3f3f3f/2)puts("impossible"); //如果大于最大值的一半就是不存在
else cout<<s[b][c]<<'\n'; //否则输出这个最小路
}