floyd就是一个动态规划的过程,按照模板写下来就好了。。。。
然后一定要加完一步再取模,不要在动态规划的过程中就开始取模,亲测会WA。。
#include <bits/stdc++.h>
using namespace std;
int n,m;
long long d[505][505];
long long f[505];
long long inf=0x3f3f3f3f;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)d[i][j]=0; //自己跟自己的距离设为0
else d[i][j]=inf; //每两点间距设为无穷大
for(int i=1;i<=m;i++)
{
int a,b;
long long c;
cin>>a>>b>>c;
d[a][b]=min(d[a][b],c); //存下距离
d[b][a]=min(d[b][a],c);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(d[i][j]!=inf)f[i]=(f[i]+d[i][j])%998244354;
}
cout<<f[i]<<endl;
}
return 0;
}