loj #6046. 「雅禮集訓 2017 Day8」爺

#6046. 「雅禮集訓 2017 Day8」爺

題目描述

若是你對山口丁和 G&P 沒有興趣,能夠無視題目背景,由於你估計看不懂 ……html

在第 63 回戰車道全國高中生大賽中,軍神西住美穗帶領大洗女子學院的你們戰勝了其餘全部高中,取得了勝利,固然也就不用廢校了。
然而一羣戰車道的領導表示他們是口胡的,廢校仍是要廢的。node

軍神的母親西住志穗怒斥廢校男,爲了避免造個大新聞,廢校男承諾若是大洗學院能夠戰勝大學隊,就不用廢校。
(有種 OI 選手 PK ACM 選手的感受呀)
然而實力差距太大了,大洗女子學院最強的車是虎式 P 型,而大學隊清一色的 M26 潘興,M24 霞飛(忽然發現如今霞飛被砍的好慘),還有能跑到 20 的 T95 和卡爾臼炮,感受根本無法打呀。
這時候一個光頭的胖子謝爾蓋 • 布爾卡托夫斯基和一個身患癌症急需錢來治病的王姓 CEO 來幫助她們了。
他們把一堆真實性堪憂的坦克圖紙給了大洗學院的妹子們,並說這些圖紙是真的,並且還原了歷史。
大洗學院汽車部的你們看到了這些圖紙後很是高興,開始膜改她們的戰車。
虎式 P 型 -> 蟋蟀 17
四號 D 型 -> 四號坦克武器運載車
38(t) 型 -> 萊茵金屬公司武器運載車
B1-bis -> 105leFH18B2
即便這樣,只有 8 輛戰車的大洗女子學院仍然沒法戰勝有 30 輛戰車的大學隊。ios

這時候按照劇本其餘高中的小夥伴要來幫忙了,然而她們最近正在學習 OI,碰到了一道很神奇的數據結構題,不會作因此來不了。 你做爲一個三次元的國家隊選手,固然能秒殺二次元的 OI 題啦。 請幫幫她們吧!數據結構

給你一個 n nn 個點的有根樹,1 11 爲根,帶邊權,有 m mm 次操做。ide

  1. 求 x xx 的子樹中第 k kk 小的深度的值,若是子樹中沒有 k kk 個點則輸出 −1 -11;
  2. 江 x xx 與 x xx 父親的邊權加上 k kk。

保證每次操做 2 的 k kk 以及原樹的邊權小於等於一個數 len \text{len}len。學習

若是操做 2 中 x xx 爲 1 11,那麼視爲將 x xx 的基礎深度加上了 k kk。測試

輸入格式

第一行三個數 n nn、m mm、len \text{len}len。
以後 n−1 n - 1n1 行每行兩個數表示 2∼n 2 \sim n2n 每一個點的父親編號,以及他們到父親的邊權。
以後 m mm 行每行三個數 opt \text{opt}opt、x xx、k kk,opt \text{opt}opt 表示操做種類,x xx、k kk 意義如題所述。
ui

輸出格式

對於每一個操做 1,輸出一個數表示答案。spa

樣例

樣例輸入

3 5 3
1 3
2 3
1 1 3
2 3 3
1 1 3
2 1 2
1 1 3

樣例輸出

6
9
11

數據範圍與提示

對於 10% 10\%10% 的數據,n,m≤1000 n, m \leq 1000n,m1000;
對於 30% 30\%30% 的數據,n,m≤30000 n, m \leq 30000n,m30000;
對於 100% 100\%100% 的數據,n,m≤100000,len≤10 n, m \leq 100000, \text{len} \leq 10n,m100000,len10。
code

本水題採用捆綁測試,你只有經過該部分分的全部數據才能夠獲得該部分分的分數。

若是你對山口丁和 G&P 沒有興趣,能夠無視結局。
若是你作出來了這個題
妹子們看了你的 STD 以後都 A 了這個題,而後去幫助軍神。
她們找了 30 個 183 射了對面一臉。
若是你沒作出來這個題
妹子們雖然很想幫助軍神,可是也心有餘而力不足,畢竟學戰車道不能保送。
沒有辦法,只能 8 打 30 了。
萊茵蹲在草裏,大學隊沒有人發現它,成功擊殺五輛敵方坦克後由於車體沒法承受火炮後坐力而解體。
三突也蹲在草裏,大學隊沒有人發現它,它也沒有發現任何人,最後蹲不住了去突擊,擊毀一輛潘興後被擊毀。
四運文藝倒車,大學隊看到以後目瞪口呆,成功擊殺八輛敵方坦克後由於車體沒法承受火炮後坐力而解體。
虎 P 炮一發帶走了 95,而後由於轉場的時候發動機故障而燒燬。
最後法五金刺刀了 15 個,成功翻盤。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
using namespace std;
int head[maxn],sz[maxn],dep[maxn],dfn[maxn],l[maxn],r[maxn],a[maxn],fa[maxn],b[maxn],dfv[maxn];
int n,m,num,len,id;
struct node{int to,pre,v;}e[maxn*2];
void Insert(int from,int to,int v){
    e[++num].to=to;
    e[num].v=v;
    e[num].pre=head[from];
    head[from]=num;
}
void dfs(int x){
    dfn[x]=++id;dfv[id]=x;
    l[x]=id;
    for(int i=head[x];i;i=e[i].pre){
        int to=e[i].to;
        dep[to]=dep[x]+e[i].v;
        dfs(to);
    }
    r[x]=id;
}
int main(){
    scanf("%d%d%d",&n,&m,&len);
    int x,y;
    for(int i=2;i<=n;i++){
        scanf("%d%d",&fa[i],&x);
        Insert(fa[i],i,x);
    }
    dfs(1);
    for(int i=1;i<=n;i++)a[i]=dep[dfv[i]];
    int op,k;
    while(m--){
        scanf("%d%d%d",&op,&x,&k);
        if(op==1){
            if(r[x]-l[x]+1<k){
                puts("-1");
                continue;
            }
            else {
                for(int j=l[x];j<=r[x];j++)b[j]=a[j];
                sort(b+l[x],b+r[x]+1);
                printf("%d\n",b[k+l[x]-1]);
            }
        }
        else {
            for(int i=l[x];i<=r[x];i++)a[i]+=k;
        }
    }
    return 0;
}
50分 暴力
相關文章
相關標籤/搜索