首页 > 其他分享 >Codeforces Round #800 div1 B

Codeforces Round #800 div1 B

时间:2022-10-09 18:02:09浏览次数:45  
标签:return int Codeforces dfs ans const 800 节点 div1

B. Fake Plastic Trees

看了第三个样例 发现一个节点可以由他的几个子节点一起构成
我们首先自下而上的看
肯定叶子节点越大越好 这样我们选择的空间就会越多
再者要是我们该节点的L还是小于我们叶子节点的sum 那我们不得不再加一次操作
而对于这次操作我们还是可以贪心的把他看成叶子节点
所以我们return的时侯显然有两种情况
第一种是叶节点sum够 return min(sum,r[u])
第二种是不够 直接ans++ return r[u]即可

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
vector<int>g[N];
int n,fa[N],ans,L[N],R[N];
int dfs(int u){
    int res=0;
    for(auto v:g[u]){
        res+=dfs(v);
    }
    if(res<L[u])ans++,res=R[u];
    return min(R[u],res);
}
void solve() {
    cin>>n;
    for(int i=1;i<=n;i++)g[i].clear();
    for(int i=2;i<=n;i++){
        cin>>fa[i];
        g[fa[i]].push_back(i);
    }
    for(int i=1;i<=n;i++){
        cin>>L[i]>>R[i];
    }
    ans=0;
    dfs(1);
    cout<<ans<<endl;
}
signed main(){
    fast
    int t;t=1;cin>>t;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:return,int,Codeforces,dfs,ans,const,800,节点,div1
From: https://www.cnblogs.com/ycllz/p/16773106.html

相关文章

  • 「题解」Codeforces 1572B Xor of 3
    我知道你很急,但你先别急。我急了我急了我急了。如果直接上去莽构造的话,很可能就是像我一样大分讨的后果。先特判掉全是1,或者1的个数是奇数的情况。我的做法是考虑所......
  • Dytechlab Cup 2022(div1+div2) D.Ela and the Wiring Wizard
    题意给定一个无向图,现在有操作:假设点u,v直接相连,边权为w,t与v直接相连,那么可以把u,v之间的边与v断开,连到t上,于是现在t-u多了一条权值为w的边。每次操作的贡献为边权大小。......
  • Codeforces Round #822 (Div. 2)
    A题意给一个长为n的数组,每次可以对其中某个数做+1或-1的操作。求最小的操作次数,使得可以从数组中选出三个相同的数。思路很容易可以想到选三个最接近的数然后操作。也......
  • Codeforces.1305B Kuroni and Simple Strings[模拟]
    题面NowthatKuronihasreached10yearsold,heisabigboyanddoesn'tlikearraysofintegersaspresentsanymore.ThisyearhewantsaBracketsequencea......
  • Codeforces补入门题
    CodeforcesRound#620(Div.2)LongestPalindrome题意给定n个长度为m的字符串,使用其中尽可能多的字符串构成一个回文串输出回文串长度及该回文串(顺序可以乱)分析由于......
  • [题解] Codeforces Dytechlab Cup 2022 1737 A B C D E 题解
    傻*Dytechlab还我rating!(不过目前rating还没加上去,据说E是偷的说不定要unrated)实在没预料到会打成这样。。。求点赞点我看题A.ElaSortingBooks从前往后一位一位确......
  • 技术师父月薪4000,送快递最低8000:先谈钱再谈工匠精神
    众所周知,一个国家想要从制造大国走向制造强国,除了科技发展之外,最为重要的就是培养出大批的中坚型技术人才。然而随着互联网时代的发展,技术工,曾几何时令人羡慕的工作,在现如今......
  • [CodeForces-1198E] Rectangle Painting 2
    题解:朴素做法,是最小点覆盖点数是n*n,考虑离散化后,把每个矩形块看作点,跑最小点权覆盖。将矩形:左下角(x1,y1)到右上角(x2,y2)的x2++,y2++,那么这样离散化后每个x1<=x<x2,y1......
  • Codeforces Round #570 (Div. 3) C. Computer Game(二分)
    https://codeforces.com/contest/1183/problem/C题目大意:给定k的总时间,必须玩n局,每一局正常消耗a时间,插电玩消耗b时间问我们在能>0的剩余时间内玩完这n局下的可以最大......
  • Educational Codeforces Round 100 (Rated for Div. 2) B. Find The Array(思维)
    https://codeforces.com/contest/1463/problem/B题目大意:给定n个数字的数组a,让我们凑出数组b;满足b[i]要么可以整除b[i+1],要么可以被b[i+1]整除,同时2*求和abs(a[i]-b[......