「JSOI2015」salesman
标签:long pen man 就是 online http 判断 clu cto
「JSOI2015」salesman
传送门
显然我们为了使收益最大化就直接从子树中选大的就好了。
到达次数的限制就是限制了可以选的子树的数量,因为每次回溯上来都会减一次到达次数。
多种方案的判断就是看自己选中的子树中和没选的子树中是否存在两个值相等的,这样它们就可以通过互换来达到另一种方案,值得注意的是如果选了一个值为 \(0\) 的子树就肯定可以多一种方案出来,因为这颗子树选或不选都是满足最优的。
这里有个小问题:交到BZOJ上面去它会提示你 sort
没有声明,此时需要 #include
,具体我也不知道为什么。。。
#include
#include
#include
#include
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' dp[y]; }
inline void dfs(int u, int f) {
vector tmp; tmp.clear();
dp[u] = a[u];
for (rg int i = head[u]; i; i = edge[i].nxt)
if (edge[i].v != f) dfs(edge[i].v, u), tmp.push_back(edge[i].v);
int p = 0, lim = min((int) tmp.size(), t[u] - 1);
sort(tmp.begin(), tmp.end(), cmp);
while (p = 0) dp[u] += dp[tmp[p]], g[u] |= g[tmp[p]], ++p;
if ((p > 0 && p 0 && dp[tmp[p - 1]] == 0)) g[u] = 1;
}
int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(n);
for (rg int i = 2; i
「JSOI2015」salesman
标签:long pen man 就是 online http 判断 clu cto
原文地址:https://www.cnblogs.com/zsbzsb/p/12283894.html
评论