萌新第一天学c++,10代码求调
查看原帖
萌新第一天学c++,10代码求调
602624
___njr___楼主2023/8/18 10:00
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
struct node {
	vector<node*>son;
	vector<int>son_wide;
	node* fat;
	int val;
};
node tree[1000010];
long sizE[1000010];
long long ans = 0;
inline void dfs(node* root) {
	sizE[root->val] = 1;
	for (int i = 0; i < root->son.size(); ++i) {
		dfs(root->son[i]);
		sizE[root->val] += sizE[root->son[i]->val];
	}
}
inline void dfs2(node* root) {
	for (int i = 0; i < root->son.size(); ++i) {
		ans += root->son_wide[i] * abs((n - sizE[root->son[i]->val]) - sizE[root->son[i]->val]);
		dfs2(root->son[i]);
	}
}
signed main() {
	cin >> n;
	for (int i = 1; i <= n; ++i)tree[i].val = i;
	for (int i = 1; i < n; ++i) {
		int u, v, w;
		cin >> u >> v >> w;
		if (tree[v].fat != nullptr) [[likely]]{
			swap(u, v);
		}
		tree[u].son.push_back(tree + v);
		tree[v].fat = tree + u;
		tree[u].son_wide.push_back(w);
	}
	node* root = tree+1;
	while (root->fat != nullptr) {
		root = root->fat;
	}
	dfs(root);
	dfs2(root);
	cout << ans;
	return 0;
}
2023/8/18 10:00
加载中...