phi_93 @ 2024-11-25 21:57:43
看题解都用dijkstra写的,蒟蒻不是很明白,为什么想我这样写是错误的(已经试过不是long long的问题),WA了第11个点,求解释
#include <iostream>
#include <utility>
using namespace std;
int n;
int C[1005],way[1005];
pair<int,int> p[100005];
int head[1005],nxt[100005];
int cnt;
void dfs(int x){
if(way[x])return;
way[x]=1;
for(int i=head[x];i;i=nxt[i]){
dfs(p[i].first);
dfs(p[i].second);
if(C[p[i].first]+C[p[i].second]==C[x]){
way[x]+=way[p[i].first]*way[p[i].second];
}else if(C[p[i].first]+C[p[i].second]<C[x]){
C[x]=C[p[i].first]+C[p[i].second];
way[x]=way[p[i].first]*way[p[i].second];
}
}
}
void add(int a,int b,int c){
p[++cnt]=make_pair(a,b);
nxt[cnt]=head[c];
head[c]=cnt;
}
int main(){
cin >> n;
for(int i=0;i<n;i++){
cin >> C[i];
}
int a,b,c;
while(cin >> a >> b >> c){
add(a,b,c);
}
dfs(0);
cout << C[0] << " " << way[0];
return 0;
}