• loj #6046. 「雅礼集训 2017 Day8」爷


    #6046. 「雅礼集训 2017 Day8」爷

    题目描述

    如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 ……

    在第 63 回战车道全国高中生大赛中,军神西住美穗带领大洗女子学院的大家打败了其他所有高中,取得了胜利,当然也就不用废校了。
    然而一群战车道的领导表示他们是口胡的,废校还是要废的。

    军神的母亲西住志穗怒斥废校男,为了不造个大新闻,废校男承诺如果大洗学院可以打败大学队,就不用废校。
    (有种 OI 选手 PK ACM 选手的感觉呀)
    然而实力差距太大了,大洗女子学院最强的车是虎式 P 型,而大学队清一色的 M26 潘兴,M24 霞飞(突然发现现在霞飞被砍的好惨),还有能跑到 20 的 T95 和卡尔臼炮,感觉根本没法打呀。
    这时候一个光头的胖子谢尔盖 • 布尔卡托夫斯基和一个身患癌症急需钱来治病的王姓 CEO 来帮助她们了。
    他们把一堆真实性堪忧的坦克图纸给了大洗学院的妹子们,并说这些图纸是真的,而且还原了历史。
    大洗学院汽车部的大家看到了这些图纸后非常高兴,开始膜改她们的战车。
    虎式 P 型 -> 蟋蟀 17
    四号 D 型 -> 四号坦克武器运载车
    38(t) 型 -> 莱茵金属公司武器运载车
    B1-bis -> 105leFH18B2
    即使这样,只有 8 辆战车的大洗女子学院仍然无法打败有 30 辆战车的大学队。

    这时候按照剧本其他高中的小伙伴要来帮忙了,然而她们最近正在学习 OI,碰到了一道很神奇的数据结构题,不会做所以来不了。 你作为一个三次元的国家队选手,当然能秒杀二次元的 OI 题啦。 请帮帮她们吧!

    给你一个 n nn 个点的有根树,1 11 为根,带边权,有 m mm 次操作。

    1. 求 x xx 的子树中第 k kk 小的深度的值,如果子树中没有 k kk 个点则输出 −1 -11;
    2. 江 x xx 与 x xx 父亲的边权加上 k kk。

    保证每次操作 2 的 k kk 以及原树的边权小于等于一个数 len ext{len}len。

    如果操作 2 中 x xx 为 1 11,那么视为将 x xx 的基础深度加上了 k kk。

    输入格式

    第一行三个数 n nn、m mm、len ext{len}len。
    之后 n−1 n - 1n1 行每行两个数表示 2∼n 2 sim n2n 每个点的父亲编号,以及他们到父亲的边权。
    之后 m mm 行每行三个数 opt ext{opt}opt、x xx、k kk,opt ext{opt}opt 表示操作种类,x xx、k kk 意义如题所述。

    输出格式

    对于每个操作 1,输出一个数表示答案。

    样例

    样例输入

    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, ext{len} leq 10n,m100000,len10。

    本水题采用捆绑测试,你只有通过该部分分的所有数据才可以得到该部分分的分数。

    如果你对山口丁和 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
    ",b[k+l[x]-1]);
                }
            }
            else {
                for(int i=l[x];i<=r[x];i++)a[i]+=k;
            }
        }
        return 0;
    }
    50分 暴力
  • 相关阅读:
    网益云——冲刺博客0
    网益云——软件工程之现场编程实战
    2020福州大学软件工程实践个人总结
    2020福州大学软件工程实践结对编程作业二
    福州大学软件工程实践个人编程作业
    2020软工第一次作业
    C. Present(二分 + 扫描线)
    P1287 盒子与球
    错排
    Codeforces 1323 D. Present (思维)
  • 原文地址:https://www.cnblogs.com/thmyl/p/8969762.html
Copyright © 2020-2023  润新知