社区讨论
https://www.luogu.com.cn/problem/P1875
题目总版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m3x3g0cv
- 此快照首次捕获于
- 2024/11/25 21:58 去年
- 此快照最后确认于
- 2024/11/26 11:51 去年
看题解都用dijkstra写的,蒟蒻不是很明白,为什么想我这样写是错误的(已经试过不是long long的问题),WA了第11个点,求解释
CPP#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;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...