C. Tree Infection

题目:

C. Tree Infection

C. Tree Infection

题目分析:

这道题是一个关于树的问题,我们已知一棵深度若干的健康的树,然后每秒能进行一次操作,操作分为两个内容,一个是spreading,是说一群兄弟节点中,只要有一个被感染了,每一秒这些兄弟节点之间就会被感染一个(注意,只是感染一个,而不是说每一个被感染的都可以去感染一下旁边的节点,不然就比较麻烦了这道题,要注意题目中说到的at most one child of vertex V,这个V是这一群兄弟的父节点),第二个操作就是注射,可以手动的给一个健康的节点变为被感染;

题解:这里要用到贪心的思路,因为我要让这棵树以最快的速度整体被感染,再看到我们的操作,每秒的注射是只有一个节点能被感染,而传播的话则没有上限,所以发挥感染的最大作用的是spreading,但是我们又可以因为题目的限制知道,一群兄弟节点每秒最多只有一个节点被传播感染,所以我们肯定要尽可能多的使更多的兄弟群体中存在被感染的,这就是inject的作用;

为了防止我还需要inject来感染那些没有被感染的兄弟节点时,前面的兄弟节点都已经感染完了,这就跟资本家剥削工人一样,资本家要高级技术工热门到不同的工厂去教会一般工人工作,那么就会让那些工作量大的先被教会,避免其他工厂都已经休假了,还在等着最后一个量很多的工厂工作;

所以这里关键的数据是每一群兄弟的兄弟个数,并且以之为根据进行降序排序,然后我就从上往下去一个个inject,我们把所有的都inject一遍称为一个周期,每个周期结束后,我们把那些工作量已经没了的工厂关掉,对剩下的工厂进行排序……直至所有工厂都被关掉!

那么我们就可以把inject和spread的过程封装成一个函数proc();

下面是代码:Submission #153156667 – Codeforces

Original: https://www.cnblogs.com/ZheyuHarry/p/16130834.html
Author: ZheyuHarry
Title: C. Tree Infection

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583590/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球