还是万年不变的外链

这个题。。。。。是最难的。。。。但是不知道为啥扶苏神仙讲完了之后我竟然听懂了。。。。

所以这个题我要好好写一写

首先我们看一看每一个测试点,来一点点得分

第一个测试点n = 1,直接输出w1就行,5分到手

第2-5个点,数据范围很小,我们可以打深搜

因为n = 8,所以即使是全排列也无非是8!,小的可怜,然后o(n)地check一遍是不是合法,所以最后的时间复杂度是O(n!n)

要考虑排列顺序一定是保证某个点的所有儿子都出现之后才能出现,否则不合法,而对于合法的排列,我们计算其w值,并且min(ans,w的和),最后输出ans即可,然后就又拿到了20分

第6-7个点,我们可以发现那玩意是个二叉树,这个就好办多了,

我们考虑这样一个东西

现在我们扫到了一个根节点为a的点,他有两个儿子分别是x,y,如果先进入x,那么我们需要的石子数就是W[x](指的是其子树的和)+w[a],同理,先进去y的话,我们需要的石子数就是W[y](指的是其子树的和)+w[a],假设w[y]更大的话,我们先进入y,当我们把y的子树放满了,我们就可以放y这个点了,在把y放上之后,我们可以把y的所有子树的石子拿出来扔到x的子树里去,这样不仅能不多用石子,甚至还有可能多余出石子放在a里,要是你先进x的话,就会导致你还得多带上w[y] - w[x]个石子,否则你将放不满y的子树,这样就不合法了

因为是二叉树,所以直接判断就好啦,最后所有答案加起来就是结果啦

测试点8-10,因为最多只有5个孩子,又因为n不算太大,我们可以暴力算出选孩子的顺序看那个最优秀,时间复杂度是O(5! n),说实话5! = 120的话,最后也不过是1e6多一点,正常跑就行了

测试点 11-14: 树高最多为 3。考虑进入第 3 层时由于不能回收石子,所以进入第三层的顺序无所谓,即对于第 2 层的每个节点 u,都有。现在只需要考虑从 1 号节点 进入它的所有孩子节点的顺序即可。 考虑走完节点 u 的所有孩子 v 所需要的总石子数 c[u],显然是越少越好。证明如 下: 走完所有孩子后,所花费的总石子数不变,设剩下的石子(也就是所需要的减去所 花费的)为 ret,注意到当 c[u] 最小的时候即是 ret 最小的时候。考虑当 ret ≥ wu 的时候,直接用 ret 放下 u 上的石子,于是放石子在节点 u 的总花费就是 c[u],后者 越小越好。 当 ret < w[u] 的时候,用剩下的石子放在 u 上,然后再额外放上去一些石子,这 样做的花费是 ,这显然是最小的花费,考虑当 c[u] 越小 ret 才越小,c[u]取 最小时显然能取到最优情况。 综上,可以尽可能使 c[u]减小,来达到最优解。 那么问题变成了: 有 x 个商品,购买第 i 个物品需要手里有 ansi 元钱,花费 wi 元。求一个顺序 使得购买所有商品所需要的钱数最少。 这个问题的最最优顺序是按照不升序购买,也就是差值越大越要先买。 考虑证明: 设有两个物品 i,j,设 ai=ansi-wi,aj=ansj-wj。且 ai>aj。考虑先买 i 再买 j 的 花费是 max(ansi, wi+ansj) ①,同理先买 j 的花费是 max(ansj, wj+ansi) ②。 提出 w,则 ①=wi+max(ai,ansj),②=wj+max(aj,ansi)=wj+max(aj,ai+wi)=wj+ai+wi。 考虑 ① 式的 max 如果取前面一项,则 ①=wi+ai<②,如果取后面一项则 ① =wi+ansj=wi+aj+wj<②,于是无论怎么取,①式恒小于②式,于是先买 i 更优。数学归纳法可得按照 ansi-wi 不升序购买最优。

最后贴一下代码吧

#include <cstdio>
#include <vector>
#include <algorithm> const int maxn = ; int n;
int MU[maxn], ans[maxn];
std::vector<int>son[maxn]; void dfs(const int u);
bool cmp(const int &_a, const int &_b); int main() {
freopen("yin.in", "r", stdin);
freopen("yin.out", "w", stdout);
scanf("%d", &n);
for (int i = , x; i <= n; ++i) {
scanf("%d", &x);
son[x].push_back(i);
}
for (int i = ; i <= n; ++i) {
scanf("%d", MU + i);
}
dfs();
for (int i = ; i < n; ++i) {
printf("%d ", ans[i]);
}
printf("%d\n", ans[n]);
return ;
} void dfs(const int u) {
for (auto v : son[u]) {
dfs(v);
}
std::sort(son[u].begin(), son[u].end(), cmp);
int _ret = ;
for (auto v : son[u]) {
if (_ret >= ans[v]) {
_ret -= ans[v];
} else {
ans[u] += ans[v] - _ret;
_ret = ans[v] - MU[v];
}
}
ans[u] += std::max(, MU[u] - _ret);
} inline bool cmp(const int &_a, const int &_b) {
return (ans[_a] - MU[_a]) > (ans[_b] - MU[_b]);
}

还有。。。。。。。c++11是个好东西可惜我不会。。。。。。。。

zay大爷的膜你题 D2T2——不老梦(AK梦)的更多相关文章

  1. zay大爷的膜你题 D2T1 江城唱晚

    依旧是外链... 这一次网易云爆炸了....所以我决定后面的都用QQ 下面是题面 这道题是一道傻逼题 数学题,我们仔细看一看,首先有m朵花的话,我们就有m!种排列方式(也就是m的全排列), 然后我们假 ...

  2. NIOP 膜你题

    NOIp膜你题   Day1 duliu 出题人:ZAY    1.大美江湖(mzq.cpp/c) [题目背景] 细雪飘落长街,枫叶红透又一年不只为故友流连,其实我也恋长安听门外足音慢,依稀见旧时容颜 ...

  3. NOIP 膜你题 DAY2

    NOIp膜你题   Day2 duliu 出题人:ZAY     题解 这就是一道组合数问题鸭!!!  可是泥为什么没有推出式子!! 首先我们知道的是 m 盆花都要摆上,然后他们的顺序不定(主人公忘记 ...

  4. zay大爷的神仙题目 D1T3-膜你抄

    依旧是外链 锦鲤抄 [题目背景] 你在尘世中辗转了千百年 却只让我看你最后一眼 火光描摹容颜燃尽了时间 别留我一人,孑然一身 凋零在梦境里面. ——银临&云の泣<锦鲤抄> [问题描 ...

  5. zay大爷的神仙题目 D1T2-腐草为萤

    题面如下 依照旧例放外链 [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼嫩的新叶, ...

  6. zay大爷的神仙题目 D1T1-大美江湖

    在前几天的时候,千古神犇zay(吊打zhx那个)出了一套神仙题目,所以我得来分析分析QWQ 先补个网易云链接QWQ 毕竟是T1嘛,还算是比较简单的,那道题,读完题目就发现是个中等模拟(猪国杀算大模拟的 ...

  7. 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解

    F. Monkeying Around   维护点在多少个线段上 http://codeforces.com/gym/101350/problem/F 题意:有m个笑话,每个笑话的区间是[L, R], ...

  8. NOIP2016 玩脱记

    NOIP前: NOIP前停课了一个多月,这一个多月里浪得飞起,内心十分紧张,然后就不知不觉就到NOIP了. Day 0: 上火车前ryc给我们出了道题"一个数列,只有两个数出现了奇数次,找出 ...

  9. 2015 CTSC & APIO滚粗记

    o诶人太弱..... 记一发滚粗记以便治疗我的健忘症= = //文章会不定时修改,添加一些内容什么的...因此最好看一下刷新一下(因为有可能你正在看= =我正在写... 5.2 早上9点坐上长达11小 ...

随机推荐

  1. [转载]Ubuntu如何切换到命令行模式

    来源:https://blog.csdn.net/lyy14011305/article/details/76325067 Ubuntu提供两种进入方式,一个是我们平常最熟悉的图形界面形式,还有一种是 ...

  2. log4net日志输出配置即输出到文件又输出到visual studio的output窗口

    <configuration> <configSections> <section name="log4net" type="log4net ...

  3. 【网络安全】telnet 登陆远程服务器

    • 实验环境:        a. Vmware 14 PRO        b. windows 7 x64 客户机        c. windows server 2008 R2 x64 服务器 ...

  4. node.js中使用imagemagick进行图片裁剪压缩

    node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...

  5. 修改MIGO或者ML81N产生的会计凭证项目文本增强

    在程序:MM07MFF9_F_BELEG_ERGAENZEN下做隐式增强

  6. java gRPC四种服务类型简单示例

    一.gRPC 简介 gRPC 是Go实现的:一个高性能,开源,将移动和HTTP/2放在首位通用的RPC框架.使用gRPC可以在客户端调用不同机器上的服务端的方法,而客户端和服务端的开发语言和 运行环境 ...

  7. wordpress的固定链接问题

    在安装完wordpress后,按照其方法在/etc/apache2/sites-available/000-default.conf文件中添加了下述代码中的加重部分: [...] ServerAdmi ...

  8. AIX中卷组管理

      1.创建卷组 使用mkvg指令创建卷组. mkvg 指令参数 -B 创建大型卷组,该卷组最大能容纳128个物理卷和512个逻辑卷 -C 创建增加型并发卷组 -f 强制创建卷组 -G 与-B一样,创 ...

  9. ossec安装配置

    测试机 172.16.53.191 服务端(server) 测试机 172.16.53.253 客户端(agent) [server端配置] yum install mysql mysql-serve ...

  10. [SCOI2016]幸运数字(线性基,倍增)

    [SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作 ...