Submission #1214007

#TimeUsernameProblemLanguageResultExecution timeMemory
1214007trinm01Harbingers (CEOI09_harbingers)C++20
20 / 100
1098 ms40776 KiB
#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;
}

Compilation message (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 timeMemoryGrader output
Fetching results...