「JSOI2015」salesman

2021-04-18 08:29

阅读:671

标签: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


评论


亲,登录后才可以留言!