#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define FOR(i, l, r) for (int i = (l); i <= (r); i++)
#define FOD(i, r, l) for (int i = (r); i >= (l); i--)
#define fi first
#define se second
#define pii pair<int, int>
const ll mod = 1e9 + 7;
const ll MAXN = 1e6 + 5;
const int oo = 1e18;
const int base = 320;
int n, s[MAXN], p[MAXN], d[MAXN], l[MAXN], r[MAXN], par[MAXN];
vector<pii> adj[MAXN];
int cnt=0;
void dfs(int u, int last){
l[u]=++cnt;
for(auto [v, c]:adj[u]){
if(v==last) continue;
par[v]=u;
d[v]=d[u]+c;
dfs(v, u);
}
r[u]=cnt;
}
struct node{
int d, u, kq;
}a[MAXN];
int dist(int u, int v){
if(l[v]>=l[u] && l[v]<=r[u])
return d[v]-d[u];
return 1e15;
}
bool cmp(node a, node b){
return a.d<b.d;
}
int f[MAXN];
void dfs2(int u, int last){
for(auto [v, c]:adj[u]){
if(v==last) continue;
int vv=v;
f[v]=s[v]+d[v]*p[v];
while(vv!=1){
vv=par[vv];
f[v]=min(f[v], f[vv]+s[v]+(d[v]-d[vv])*p[v]);
}
dfs2(v, u);
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen(".INP", "r"))
{
freopen(".INP", "r", stdin);
freopen(".OUT", "w", stdout);
}
cin >> n;
FOR(i, 1, n-1){
int u, v, c;
cin >> u >> v >> c;
adj[u].push_back({v, c});
adj[v].push_back({u, c});
}
FOR(i, 2, n){
cin >> s[i] >> p[i];
}
par[1]=1;
dfs(1, 1);
// sort(a+1, a+1+n, cmp);
// FOR(i, 1, n){
// int u=a[i].u;
// f[u]=s[u]+dist(1, u)*p[u];
// // cout << u << ' ';
// FOR(j, 1, i-1){
// int v=a[j].u;
// // cout << v << ' ' << u << ' ' << dist(v, u) << '\n';
// f[u]=min(f[u], f[v]+s[u]+dist(v, u)*p[u]);
// }
// }
dfs2(1, 1);
FOR(i, 2, n){
cout << f[i] << ' ';
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
harbingers.cpp: In function 'int main()':
harbingers.cpp:68:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | freopen(".INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~
harbingers.cpp:69:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
69 | freopen(".OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |