首页 > 其他分享 >SMUSpring天梯赛1

SMUSpring天梯赛1

时间:2024-03-14 23:57:16浏览次数:30  
标签:遍历 cur int SMUSpring depth deepest 天梯 节点

补题1:龙龙送外卖

题意:

做法:思维--遍历方式,从输入的点往外卖点遍历,或标记过的点。回溯的时候更新深度!

//到达了最后一个送货点之后不用返回根结点.那么之前到达的点都是要折返点,那么就最后才送最深点节点。
    //还有就是如果在去节点8点时候,途径了节点2,那么这个时候去节点2的路可以忽略,因为是顺路的。
    //一边读入一边遍历,从输入的点开始,往上走.直到到达外卖站或到达一个被标记过的点,停止.
    // 回溯的时候更新深度!! 而且dfs不是void类型,要返回该次点增加的代价.并且要更新deepest.输出sum-deepest即可.

int n,q,s,ans=0,deepest=0;
int fa[100005],depth[100005];
unordered_map<int,bool> mark;
int dfs(int cur,int d){
    if(cur==s||mark[cur]){
        deepest=max(deepest,depth[cur]+d);
        return 2*d;
    }
    int res=0;                          //res
    res+=dfs(fa[cur],d+1);
    depth[cur]=depth[fa[cur]]+1;
    mark[cur]=1;
    deepest=max(deepest,depth[cur]);
    return res;
}
void solve(){                       //补7-11--龙龙送外卖--思维-遍历方式
    //到达了最后一个送货点之后不用返回根结点.那么之前到达的点都是要折返点,那么就最后才送最深点节点。
    //还有就是如果在去节点8点时候,途径了节点2,那么这个时候去节点2的路可以忽略,因为是顺路的。
    //一边读入一边遍历,从输入的点开始,往上走.直到到达外卖站或到达一个被标记过的点,停止.
    // 回溯的时候更新深度!!
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        if(x==-1) s=i;
        else fa[i]=x;
    }
    while(q--){
        int x;
        cin>>x;
        ans+=dfs(x,0);
        cout<<ans-deepest<<endl;
    }
}

 

标签:遍历,cur,int,SMUSpring,depth,deepest,天梯,节点
From: https://www.cnblogs.com/ouhq/p/18073533

相关文章

  • zzu2024 3月天梯赛选拔赛(A-F,I-K)
    zzu20243月天梯赛选拔赛(A-F,I-K)每题下面都写了abc上对应的原题1,Aabc148f思路就是求出A和T分别到树上某个点的最短路径长,只要T的路径小于A,T就不会被抓到,满足条件就更新A走过的路径长的最大值,注意最后答案要减1(自己想为什么)#include<bits/stdc++.h>usingname......
  • L1-049 天梯赛座位分配
    测试点1提交了好多次,都没过去。找网上那些测试点输出结果是一样的,但就是过不去。然后认真思考了一番,自己可能没理解好这道题。我的理解错误在于,认为在最大的时候,号码应该是这一队的上一个人号码加上2。实际上,只有上一个号码和他在同一队的时候,才这么干。如果不是同一队,依旧是加......
  • SMU 2024 spring 天梯赛1
    SMU2024spring天梯赛17-1种钻石查看代码voidsolve(){intn,v;cin>>n>>v;cout<<n/v;} 7-21-1输出金字塔图案查看代码 voidsolve(){cout<<"*\n""***\n""*****\n"......
  • 计算机与人工智能学院 天梯赛选拔 2024.3.12
    L1L1-1直接输出可以,C++可能比较麻烦一点,Python和Java都有块形字符串,语法"""我是字符串!""",再不济直接PHP复制粘贴也行!由于代码过长,这里不再展示原版,不过你可以玩玩别的hhpackageGPLT_test;/***@Title:L1*@Author李浩天*@Date2024/3/128:21......
  • 2021CCCC天梯赛
    L1模拟+字符串操作,L2读题+简单数据结构,L3题太长没耐心(L1-1#include<bits/stdc++.h>usingnamespacestd;intmain(){puts("Toiterateishuman,torecursedivine.");}L1-2#include<bits/stdc++.h>usingnamespacestd;intmain(){inta,b,c;c......
  • 天梯2
    1.红石难题(将红石线路拉成一条一维的线,再用总线路除一个红石源可满足的能量需求范围,不够进一即可)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inta[1000000],b[10000000];signedmain(){intn,m;cin>>n>>m;intans=1;for(inti......
  • SUM-ACM天梯赛
    第一次天梯赛:B-B:孵化小鸡题解:二进制枚举所有可能性,一个一个枚举出来,@离散数学,真值表。题目如下:二进制枚举代码如下点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cout<<"输入你要枚举的个数"; cin>>n; for(inti=0;i<=(1<<n)-1;i......
  • 天梯选拔赛2补题_2024_03_09
    补题1:奶茶袋收集题意:做法:贪心。之前还做过类似的题,赛时一直想不出来。选择k个连续的的区间,就是需要添加k-1个挡板。问题是挡板设置在哪里?可以发现一个连续线段的max-min等于线段中各个差值之和。如果k=1,那么ans=∑(ai+1-ai);如果k=2,那么需要添加一个挡板。贪心地放,挡板应该放......
  • 2024天梯选拔赛(一)
    2024天梯选拔赛(一)A私人笑声#include<bits/stdc++.h>#definedebug(a)cout<<#a<<"="<<a<<'\n';usingnamespacestd;usingi64=longlong;typedefpair<i64,i64>PII;intmain(){ios::sync_with_stdio......
  • 天梯选拔赛第一场
    B孵化小鸡-SMUOJ题解:因为数据很小我们可以枚举每一个状态然后判断一下是否可以达到孵化的温度即可我们用二进制枚举,一共1<<m相当于2的m次方,用二进制枚举每一个状态//#include<bits/stdc++.h>//#pragmaGCCoptimize("Ofast")#include<iostream>#include<cstdio>#inc......