题目:http://www.sqyoj.club/problem.php?id=1006
分析:负边权,没有负加路,不用dijkstra,用floyed或者bellman-ford。数据规模小,可以放心用floyed。
要注意的点是,要开long long。
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,srt,t;
long long s,a[81][81];
bool flag;
char c;
int main(){
cin>>n>>srt;
c=getchar();
while(c==13)c=getchar();
for(int i=1;i<=n;i++){
t=0;
while(1){
c=getchar();
while(c==' ')c=getchar();
flag=0;
if(c=='-'){
flag=1;
c=getchar();
}
s=0;
while(c>='0'&&c<='9'){
s=s*10+c-'0';
c=getchar();
}
if(flag){
if(s==0)s=1e15;
else s=-1*s;
}
++t;
a[i][t]=s;
while(c==13)c=getchar();
if(c==10 || c==EOF) break;
}
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=k && j!=k && i!=j
&& a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
for(int i=1;i<=n;i++)
if(i!=srt)cout<<"("<<srt<<" -> "<<i<<") = "<<a[srt][i]<<endl;
return 0;
}