首页 > 其他分享 >Codeforces Round #831 (Div. 1 + Div. 2)

Codeforces Round #831 (Div. 1 + Div. 2)

时间:2022-10-30 11:34:48浏览次数:75  
标签:831 int void Codeforces 子树 Div

Codeforces Round #831 (Div. 1 + Div. 2)

1.Problem - D - Codeforces

首先是一个结论就是如果除了起点终点以外你发现只要是还多一个格子你是可以把所有牌都任意移动的。

然后这个问题就很好解决了。你每次需要把最大的牌移动到终点所以你得把这些他上面的牌都移动开即可。

const int N = 1e5 + 100;
int n, m ,k;
int a[N];
void slove()
{
    cin >> n >> m >> k;
    for(int i = 1; i <= k; i++)
    {
        cin >> a[i];
        a[i] = k - a[i];
    }
    vector<bool>st(k);
    int sz = 0;
    for(int i = 1, j = 0; j < k; j++)
    {
        while(!st[j]){
            st[a[i++]] = true;
            sz++;
        }
        if(sz > n * m -3){
            cout <<"TIDAK"<< "\n";
            return;
        }
        st[j] = false;
        sz--;
    }
    cout << "YA" << "\n";
}

 

2.Problem - E - Codeforces

首先大值往上给肯定是更好的。

任意一个点的值肯定是子树中的最小值的时候才是可以取的。

然后考虑父亲是否会产生价值。首先如果是一条链,整条链肯定是都可以产生价值的。

如果是有多个儿子,父亲是肯定不产生价值的。这很好理解。你父亲最后一个取还是最小值。

一开始我认为整棵子树都能产生价值但是第一个例子就是错的。

所以就考虑子树的贡献。子树的贡献很明显是可以相加的。这是很好理解的。你赋值的时候肯定是从最左子树到最右子树从小到大赋值

嘛。所以这以此点为根的另一个可以产生的价值就是所有子树价值相加,然后两者取最大值即可。

const int N = 1e5 + 100;
int n, f[N], d[N];
vector<int>b[N];
void dfs(int u)
{
    d[u] = 1;
    for(auto v : b[u])
    {
        dfs(v);
        d[u] = max(d[v] + 1, d[u]);
        f[u] += f[v];
    }
    f[u] = max(f[u], d[u]);
}
void slove()
{
    cin >> n;
    for(int i = 2; i <= n ; i++)
    {
        int fa;
        cin >> fa;
        b[fa].pb(i);
    }
    dfs(1);
    cout << f[1] << endl;
}

标签:831,int,void,Codeforces,子树,Div
From: https://www.cnblogs.com/silky----player/p/16840801.html

相关文章

  • SET DECIMAL_V2=FALSE及UDF ERROR: Cannot divide decimal by zero及Incompatible ret
    概述最近在全职负责一款数据产品的升级改造。因旧版平台的代码写得太乱,简直惨不忍睹;别说增加功能,已有问题的定位与修复都无从下手。用户提交的,在旧版平台能执行的SQL语句,在......
  • Codeforces Round #831 (Div. 1 + Div. 2) E
    E.HangingHearts我们观察每一个节点它可以由其子节点的所有长链来构造还有就是直接可以由自己构成的一条长链所以对于每一个节点我们的答案就是max(加上自己的最长链......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    A.FactoriseN+M题意:给出一个质数,求另一个质数,使得两个数之和不是质数。解:把那个质数再输出一遍就行了。B.JumboExtraCheese2题意:给出一些长方形,按照以下规则把长......
  • Codeforces Round #750 (Div. 2) F1
    F1.KorneyKorneevichandXOR(easyversion)我们观察题意发现我们需要找的是一个上升序列我们回忆上升序列的状态设计dp[i]表示第i个作为结尾最长的序列长度是多少......
  • Educational Codeforces Round 93 (Rated for Div. 2) D
    D.ColoredRectangles考虑数据范围显然可以n3dp我们发现dp转移时不是特别好枚举所以我们选择记忆化搜索打完你们可能会发现过不去第三个样例显然我们应该sort一遍......
  • Codeforces Round #827 (Div. 4) A-G
    比赛链接A题解知识点:模拟。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;boolsolve(){......
  • Educational Codeforces Round 1
    EducationalCodeforcesRound1C.Nearestvectors题目大意给出n个向量,求出其中夹角最小的两个向量。分析求出所有向量与x轴的夹角,然后排序,两两比较夹角。AC_code#......
  • Codeforces Round #826 (Div. 3) A-E
    比赛链接A题解知识点:模拟。时间复杂度\(O(n)\)空间复杂度\(O(n)\)代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;boolsolve(){......
  • Codeforces Round #830 (Div. 2)(持续更新)
    PrefaceAB很水,C一般难度,D1很简单但D2确实巧妙没有现场打有点可惜,后面补的时候都是1A(结果每次比赛的时候都要莫名WA上好久)A.Bestie我刚开始没咋想,感觉操作步数不会很......
  • Codeforces Round #739 (Div. 3) E
    E.PolycarpandStringTransformation显然我们可以通过看谁消失的最早知道删除序列然后有了删除序列以后我们能干什么呢显然对于每一个删除序列我们要是第一次就把......