首页 > 其他分享 >Codeforces Round #847 F

Codeforces Round #847 F

时间:2023-01-28 15:22:05浏览次数:62  
标签:847 rt int res Codeforces fa ans Round dp

F. Timofey and Black-White Tree

题链
因为是一棵树的形式 我们不妨考虑dp
dp[u]表示u节点子树内黑点离u的最近距离
我们每添加一个点 当然会更新他及他链上面父亲的dp值
显然要是我们当前跑上去的距离大于了上一次的答案 我们就可以不跑了
这样我们最坏的一种情况就是一条链的形式 并且每次拿大的出来二等分
每次要上去的点数就是 n n/2 n/2 n/4 n/4 n/4 n/4 8个n/8 16个n/16 。。。。
这样酷似调和级数 甚至还比调和级数小
我们考虑如何更新答案 其实答案就是ans每次和现在跑到的dp以及现在已经回朔的距离更新一下即可

int dp[N],rt,n,c[N],fa[N];
vector<int>g[N];
void dfs(int u,int p){
    for(auto v:g[u]){
        if(v==p)continue;
        dfs(v,u);
        fa[v]=u;
    }
}
void solve(){
    cin>>n>>rt;
    c[1]=rt;
    for(int i=0;i<=n;i++){
        g[i].clear();
        dp[i]=INF;
        fa[i]=0;
    }
    for(int i=2;i<=n;i++){
        cin>>c[i];
    }
    for(int i=1;i<n;i++){
        int u,v;cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(rt,0);
    int ans=INF;
    for(int i=1;i<=n;i++){
        int p=c[i],res=0;
        while(p>0&&ans>res){
            ans=min(ans,dp[p]+res);
            dp[p]=min(dp[p],res);
            p=fa[p];
            res++;
        }
        if(i!=1)cout<<ans<<' ';
    }cout<<endl;
}

标签:847,rt,int,res,Codeforces,fa,ans,Round,dp
From: https://www.cnblogs.com/ycllz/p/17070381.html

相关文章

  • Codeforces Round #816 (Div. 2)
    D.2+doors要让字典序最小就要让每个数字在满足条件的同时都尽可能的小并且排在前面的数字变小的优先级要比排在后面的数字的优先级更大。\[\begin{aligned}1\operator......
  • Codeforces Round #847 (Div. 3)
    E.VladandaPairofNumbers题目抽象为给\(n\)\((1\len\le2^{29})\),求\(x\)满足\((n-x)\oplus(n+x)=n\),输出\(n-x\)和\(n+x\)。显然\(n\)为奇数肯定不行......
  • CF 1790E. Vlad and a Pair of Numbers_Codeforces Round #847 (Div. 3)
    给出整数x,求一对整数(a,b),满足:\(a\bigoplusb=x\),\(\frac{a+b}{2}=x\)(\(\frac{a+b}{2}\)不四舍五入,也就是\(2\mida+b\))如果不存在这样的(a,b)输出-1分析:如果x的最......
  • # CF#847 (Div. 3)ABCDE题解
    CodeforcesRound#847(DFiv.3)APolycarpandtheDayofPiProblem-A-Codeforces题目描述OnMarch14,thedayofthenumber$\pi$iscelebratedallov......
  • Educational Codeforces Round 2 个人总结A-E
    EducationalCodeforcesRound2A.ExtractNumbers简单的模拟boolcheck(stringop){ if(op.size()==1&&op[0]=='0') returntrue; if(op.size()==0||(op[0]<'1......
  • #0031. Educational Codeforces Round 1
    AB简单题C是计算几何,但核心解法很像sgnoi某年的t1,即与其考虑所有pairs,不如只考虑所有相邻的,这样复杂度就从\(O(N^2)\)降到了O(N)(如果不考虑排序的复杂度的话)。不过这......
  • Educational Codeforces Round 142
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1792。我是超级大鸽子咕咕咕A当且仅当有两个怪物初始血量为1时使用操作1,否则用操作2......
  • Codeforces Round #846 (Div. 2)
    题目链接D题意给定一个数字n,我们需要通过一系列的操作去猜测这个数字。初始的时候会给我们一个cnt,表示二进制下数字n有多少个1.每次我们可以给出一个t,然后另n减去t,系统......
  • Codeforces Round #601 (Div. 2) A-E
    比赛链接A题意给两个数字\(a,b\),每次操作可以使\(a\)加上\(+1,+2,+5,-1,-2,-5\)中的一个数,求最少多少次操作可以将\(a\)变成\(b\)。题解知识点:贪心。可以......
  • CodeForces 1415E New Game Plus!
    洛谷传送门CF传送门相当于将\(n\)个数分成\(k+1\)组,将每组的最大收益相加。容易发现组内的数不增最优。考虑开个堆,维护当前\(k+1\)组的和即可。code/*p_b_......