codeforces educational round110 e
生活随笔
收集整理的這篇文章主要介紹了
codeforces educational round110 e
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
codeforces educational round110 e
給一顆初始只有根節點0的樹,規定一個節點有數量aia_iai?,單位價格為cic_ici?的礦物。q個操作,一是往某一個節點下增加一個節點,保證增加的節點的單位價格比這個節點高;二是選擇某個節點,從根節點到當前節點路徑上購買www個貨物,要求價格和最小,如果不夠就能買多少買多少。
做這個題的時候少看了一個條件,沒看到保證比父親節點價格高,所以不會。后面發現別人寫的代碼都是樹上倍增,才知道題讀錯了。不過反正樹上倍增也不熟……
const int N = 3e5 + 10; int fa[N][21], a[N], c[N];int main() {int T = 1;//T = read();while (T --){int q;q = read(); a[0] = read(); c[0] = read();for (int i = 0; i <= 20; i ++)fa[0][i] = -1;for (int i = 1; i <= q; i ++){int jud = read();if (jud == 1){fa[i][0] = read();a[i] = read();c[i] = read();for (int k = 1; k <= 20; k ++){if (fa[i][k - 1] == -1)fa[i][k] = -1;elsefa[i][k] = fa[fa[i][k - 1]][k - 1];} }else{int v, w;v = read(); w = read();int temp = w;long long ans = 0;while (temp > 0 && a[v] > 0){int d = v;for (int i = 20; i >= 0; i --){while (fa[d][i] != -1 && a[fa[d][i]] > 0)d = fa[d][i];}int now = min(temp, a[d]);temp -= now; a[d] -= now; ans += (long long) now * c[d];}printf ("%d %lld\n", w - temp, ans);fflush(stdout);}}}return 0; }總結
以上是生活随笔為你收集整理的codeforces educational round110 e的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 获得响应内容_Java 纯HT
- 下一篇: AGC002E Candy Piles