摘要: 这题只需要考虑奇偶性即可,答案就是到子节点偶数和*到本节点奇数以及子节点奇数和本节点偶数,之后更新数量 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+10; const int m 阅读全文
posted @ 2020-05-10 20:49 朝暮不思 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 非常巧妙的转换。首先我们可以观察性质,一条边不可能出现两次,因为显然可以被更好的方案替代 之后,每个边就存在选或者不选两种情况 如果以子树的节点为偶数,那么就不需要,否则需要,做一下dfs即可 #include<bits/stdc++.h> using namespace std; typedef 阅读全文
posted @ 2020-05-10 16:53 朝暮不思 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 这题的思路很精妙,因为我们发现每个点有两种选择,一种是涂新的颜色,一种是涂原来出现的颜色 如果按树形dp的方法做,很难做,因为无法判断点之间的路径以及存在的颜色关系。因此想到使用dfs序的方式,转化成链式 这样该节点涂色之前父亲节点也被涂色。而新颜色可以随便选,原来的颜色必须和父亲节点的颜色一样 # 阅读全文
posted @ 2020-05-10 15:41 朝暮不思 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 这题暴力思路是一直往上跳,然后计算,但是我们发现,如果知道了父节点的所有信息,那么我们只需要比一下父节点的信息和自己,就知道自己能怎么跳 问题就是如何快速求信息,因此想到从根节点往下求,用倍增算法。我们是设f[i][j]为i能够交易2的j次的点在哪,所以只要知道f[i][0]就可以通过倍增思想求出所 阅读全文
posted @ 2020-05-10 14:36 朝暮不思 阅读(164) 评论(0) 推荐(0) 编辑