제출 #1347014

#제출 시각아이디문제언어결과실행 시간메모리
1347014Robert_juniorHarbingers (CEOI09_harbingers)C++20
10 / 100
86 ms131072 KiB
#include <bits/stdc++.h> 
using namespace std;
#define int long long 
#define pb push_back
#define sz(x) ((int)x.size())
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define ins insert
#define pii pair<int, int>
const int N = 1e5 + 100, K = 5, mod = 998244353, inf = 1e18;
vector<pii>g[N];
int dp[N], d[N], a[N], b[N];
void dfs(int v, int p, vector<int>V){
	dp[v] = inf; 
	if(v == 1) dp[v] = 0;
	for(auto u : V){
		dp[v] = min(dp[v], dp[u] + (d[v] - d[u]) * b[v] + a[v]);
	}
	V.pb(v);
	for(auto it : g[v]){
		int to = it.F, w = it.S;
		if(to == p) continue;
		d[to] = d[v] + w;
		dfs(to, v, V);
	}
	V.pop_back();
}
signed main(){
	ios_base :: sync_with_stdio(false); 
	cin.tie(nullptr);
	int n;
	cin>>n; 
	for(int i = 1; i < n; i++){
		int u, v, w;
		cin>>u>>v>>w;
		g[u].pb({v, w}); 
		g[v].pb({u, w});
	}
	for(int i = 2; i <= n; i++){
		cin>>a[i]>>b[i];
	}
	vector<int>V;
	dfs(1, 1, V); 
	for(int i = 2; i <= n; i++){
		cout<<dp[i]<<' ';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...