WA 0pts 代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s;
int u,v,w;
int vis[1005],a[1005],ans[1005],mrg[1005][1005];
void dijkstra()
{
for(int i=1;i<=n;i++)
{
int k=0,minn=0x3f3f3f3f3f3f3f3f;
for(int j=1;j<=n;j++)
if(!vis[j]&&a[j]<minn)
{
k=j;
minn=a[j];
}
vis[k]=1; // tag which signs whether the minimum value is appeared.
for(int j=1;j<=n;j++)
if(vis[j]&&mrg[k][j])
{
if(a[j]+a[k]==a[mrg[k][j]])
ans[mrg[k][j]]+=ans[j]*ans[k];
if(a[mrg[k][j]]>a[j]+a[k])
{
a[mrg[k][j]]=a[j]+a[k];
ans[mrg[k][j]]=ans[j]*ans[k];
}
}
}
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
ans[i]=1;
}
while(~scanf("%lld%lld%lld",&u,&v,&w))
mrg[++u][++v]=mrg[v][u]=++w;
dijkstra();
printf("%lld %lld\n",a[1],ans[1]);
return 0;
}
将
while(~scanf("%lld%lld%lld",&u,&v,&w))
mrg[++u][++v]=mrg[v][u]=++w;
改为
while(~scanf("%lld%lld%lld",&u,&v,&w))
mrg[u+1][v+1]=mrg[v+1][u+1]=w+1;
WA 0pts → AC