题目链接:HAUTOJ 1262
很简单的一道题 就是注意 需要循环N次 直到最小的不再发生变化
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m,s[100005],q[100005][3],i,j,k,min[100005],sum;
cin>>n>>m;
for(i=1;i<=n;i++)
{
cin>>s[i];
min[i]=s[i];
}
for(i=1;i<=m;i++)
cin>>q[i][0]>>q[i][1]>>q[i][2];
int o=50; //控制循环,直到最小的不再变化
while(o--)
for(i=1;i<=m;i++)
{
sum=min[q[i][0]]+min[q[i][1]];
if(sum<min[q[i][2]])min[q[i][2]]=sum;
}
cout<<min[1];
for(i=2;i<=n;i++)
cout<<" "<<min[i];
cout<<endl;
}
return 0;
}