社区讨论

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 条回复,欢迎继续交流。

正在加载回复...