可以用dp直接来维护合成所需的价值
深度是不必要地
```cpp
for(int i=1;i<=n;i++) c[i]=a[i],f[i]=1;
for(int i=1;i<=n;i++){
int y=0x7f7f7f,x=0;
for(int j=1;j<=n;j++) if(!v[j] && c[j]<y) y=c[j],x=j;
if(!x) break; v[x]=1;
for(int j=1;j<=n;j++)
if(d[x][j]!=0&&v[j]!=0){
if(c[x]+c[j]<c[d[x][j]]) c[d[x][j]]=c[x]+c[j],f[d[x][j]]=f[x]*f[j];
else if(c[x]+c[j]==c[d[x][j]]) f[d[x][j]]+=f[x]*f[j];
}
}
```
by D_14134 @ 2018-10-22 20:33:16
666大佬们神犇们+
by L______ @ 2018-10-22 20:57:14