Tree

Tree

https://ac.nowcoder.com/acm/problem/112609

#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e5 + 7;
typedef long long ll;
int f[maxn][20];
ll dp[maxn][20], val[maxn];
int main() {
    int t, op;
    scanf("%d", &t);
    int cnt = 1;
    f[1][0] = 0;
    val[1] = 0;
    val[0] = 1e18;
    ll p, q, r, x, last = 0;
    while (t--) {
        scanf("%d%lld%lld", &op, &p, &q);
        if(op == 1) {
            r = p ^ last; x = q ^ last;
            cnt++;
            val[cnt] = x;
            if(val[r] >= val[cnt]) f[cnt][0] = r;
            else {
                for (int i = 19; i >= 0; i--) {
                    if(val[f[r][i]] < x) r = f[r][i];
                }
                f[cnt][0] = f[r][0];
            }
            dp[cnt][0] = val[f[cnt][0]];
            for (int i = 1; i <= 19; i++) {
                f[cnt][i] = f[f[cnt][i - 1]][i - 1];
                if(dp[cnt][i - 1] < 1e18 && f[cnt][i])
                dp[cnt][i] = dp[cnt][i - 1] + dp[f[cnt][i - 1]][i - 1];
                else break;
            }
        }
        else {
            r = p ^ last; x = q ^ last;
//            printf("%lld %lld\n", r, x);
            last = 0;
            if(val[r] <= x) last++, x -= val[r];
            else {
                printf("%d\n", last);
                continue;
            }
//            printf("val[r] = %d x = %lld, last = %d\n", val[r], x, last);
//            printf("%lld\n", dp[3][0]);
            for (int i = 19; i >= 0; i--) {
                if(f[r][i] && dp[r][i] <= x) {
//                    printf("i = %d , f = %d,  dp = %lld\n", i, f[r][i], dp[r][i]);
                    x -= dp[r][i];
                    r = f[r][i];
                    last += (1<<i);
                }
            }
            printf("%d\n", last);
        }
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-18 15:35
程序员牛肉:完全是在胡写简历。 我很好奇你干嘛要在教育经历里面写你是软件二班的班长?你写它的目的是什么?我觉得真的就是很突兀。给我第一感觉就是:你真的是一个心智健全的成年人吗? 另外我也很好奇你是怎么做到参加了这么多所谓的计算机比赛,完事儿一个拿得出手的项目都没有。 自己的项目经历还是图书馆管理系统这种垃圾东西……我的的建议是你都不如大幅度删减一下自己的水奖项,看着真的给人一种又水又学傻了的感觉。 计算机不看奖项,看院校和个人能力。 计算机是强工科,你要投后端的你就应该明白,人家招你进去是指望你干活儿的。那你觉得你这份简历有展示出你的后端水平吗? 你动动你的脑子想一想,人家面试官要想通过你的简历看出你的项目开发能力,最重要的板块就是两个,第一个是你的实习,第二个是你的项目。你没有实习,是不是就应该在项目上好好琢磨琢磨? 你自己看看你项目写的什么描述,你作为一个要后端岗位的应届生,你对你自己项目的描述还仅仅停留在使用mySQL,使用JAVA,使用spring boot框架。给人一眼感觉就感觉完全就是你做的玩具。可能就是你哪一个学期做的课设。 对于应届生来讲,在项目板块要尽量突出自己的技术能力,因为谈业务你肯定也不懂。简单来讲,你的项目要清晰准确的表达:你用哪种技术解决了现有的哪种技术问题,带来了多少的效益提升? 所有关于项目的描述都围绕我说的这种表达方式去写。不要自己自嗨式的写一堆垃圾上去 你既没有实习项目,又没有一个比较好一点的项目,而且院校也比较差,所以找工作会异常的难找。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务