https://www.luogu.com.cn/problem/P1875

题目总版

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;
}

|