• 题意:一个图n个点n条边保证点能互相到达,ab有边意味着ab互相厌恶,求一个集合,使得集合里元素最多而且没有人互相厌恶
  • 删去环上一条边树形dp,比如删掉的边连着a,b,那么先dp出不选a的最大值,再dp出不选b的最大值。
  • 如果每次找到环删边的方法是直接把边断掉,这样会出现一个Bug就是a有指向b的边,b有指向a的边,这样形成的环其实不需要删掉
  • 解决办法:就是建边的时候如果是上面的情况a b之间就建了两条边,那这样把重边删去就行了(删完之后就break掉)
  • 代码:
     #include <bits/stdc++.h>
    #define nmax 1000010 using namespace std;
    typedef long long ll;
    vector <int> g[nmax];
    int n, in, a, b, cnt;
    ll d[nmax][]={}; // dp[u][1] = sum dp[v][0] + zl[u] dp[u][0] = sum max(dp[v][0],dp[v][1]+x[v])
    int zl[nmax], vis[nmax]={}; void dfs(int u, int fa){
    d[u][] = zl[u];
    for (int i=; i<g[u].size(); i++) {
    int v = g[u][i];
    if(v==fa || v==) continue;
    dfs(v, u);
    d[u][] += d[v][];
    d[u][] += max(d[v][], d[v][]);
    }
    } void fr(int u, int fa){
    cnt++;
    vis[u] = ;
    for (int i=; i<g[u].size(); i++) {
    int v = g[u][i];
    if(v == fa || v == ) continue;
    if( vis[v] ) { a=u; b=v; }
    else fr(v, u);
    }
    } inline void del(int x, int y){
    for (int i=; i<g[x].size(); i++) if( g[x][i] == y ) { g[x][i] = ; break; }
    } inline void init(int u, int fa){
    d[u][] = d[u][] = ;
    for (int i=; i<g[u].size(); i++) {
    int v = g[u][i];
    if( v==fa || v== ) continue;
    init(v, u);
    }
    } int main(){
    cin >> n;
    for (int i=; i<=n; i++) {
    scanf("%d%d", &zl[i], &in);
    g[in].push_back(i);
    g[i].push_back(in);
    }
    ll ans=, ta;
    for (int i=; i<=n; i++) {
    if(vis[i]) continue;
    cnt = ; //这个树套环的节点个数
    fr(i, );
    del(a, b);
    del(b, a);
    dfs(a, );
    ta = d[a][];
    init(i, );
    dfs(b, );
    ta = max(ta, d[b][] );
    init(i, );
    ans += ta;
    }
    cout << ans << endl;
    return ;
    }

    (⓿_⓿)

BZOJ1040: [ZJOI2008]骑士 树套环DP的更多相关文章

  1. luogu2607/bzoj1040 [ZJOI2008]骑士 (基环树形dp)

    N个点,每个点发出一条边,那么这个图的形状一定是一个基环树森林(如果有重边就会出现森林) 那我做f[0][x]和f[1][x]分别表示对于x子树,x这个点选还是不选所带来的最大价值 然后就变成了这好几 ...

  2. 2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)

    传送门 由题可知给出的是基环森林. 因此对于每个基环森林找到环断开dpdpdp两次就行了. 代码: #include<bits/stdc++.h> using namespace std; ...

  3. BZOJ_1040_[ZJOI2008]骑士_树形DP

    BZOJ_1040_[ZJOI2008]骑士_树形DP 题意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪 ...

  4. BZOJ1040: [ZJOI2008]骑士(奇环树,DP)

    题目: 1040: [ZJOI2008]骑士 解析: 假设骑士\(u\)讨厌骑士\(v\),我们在\(u\),\(v\)之间连一条边,这样我们就得到了一个奇环树(奇环森林),既然是一颗奇环树,我们就先 ...

  5. [BZOJ1040][ZJOI2008]骑士(环套树dp)

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5816  Solved: 2263[Submit][Status ...

  6. [bzoj1040][ZJOI2008]骑士_树形dp_基环树_并查集

    骑士 bzoj-1040 ZJOI-2008 题目大意:n个骑士,每个骑士有权值val和一个讨厌的骑士.如果一个骑士讨厌另一个骑士那么他们将不会一起出战.问出战的骑士最大atk是多少. 注释:$1\l ...

  7. 【洛谷】2607: [ZJOI2008]骑士【树形DP】【基环树】

    P2607 [ZJOI2008]骑士 题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一 ...

  8. 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士

    基环外向树dp竟然如此简单…… Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发 ...

  9. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士

    Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...

随机推荐

  1. 在CentOS8 上安装Python3

    从centos开始入手学习linux.感觉安装python很费劲,之前centos6因为python2和python3兼容的问题一直无法彻底解决,python3一旦安装影响到python2,cento ...

  2. node -- express框架

    express node的一个框架 安装express cnpm install express -S 引入 const express = require("express"); ...

  3. RFC笔记,IPv6 Node Requirements

    Request for Comments: 6434,IPv6 Node Requirements 路由器节点必须能够生成链路本地地址 5.9.2. IPv6 Stateless Address Au ...

  4. iptables之路由网关共享上网/端口映射

    linux-A 主机配置eth0即可: [root@linux-A ~]# ifconfig eth0|sed -n '2p' inet addr:192.168.20.3 Bcast:192.168 ...

  5. python 安装自己下载的whl依赖

    下载好之后保存到相应的地方,如下载了xxxx.whl文件并将它保存在D:\python\project目录下,然后 pip install  D:\python\project\xxxx.whl即可

  6. pikachu-文件包含漏洞(Files Inclusion)

    一.文件包含漏洞概述     在web后台开发中,程序员往往为了提高效率以及让代码看起来简洁,会使用"包含"函数功能.例如把一些功能函数都写进fuction.php中,之后当某个文 ...

  7. pikachu-不安全的文件下载和上传

    一.文件下载漏洞 1.1 概述     很多网站都会提供文件下载的功能,即用户可以通过点击下载链接,下载到链接所对应的文件.但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获 ...

  8. java设计模式1——单例模式

    java设计模式1--单例模式 1.单例模式介绍 1.1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 1.2.常见场景 1.3.单例模式的优点 1.4.常见的五种单例模式实现 ...

  9. Android 有关在ListView RecycleView 中使用EditText Checkbox的坑

    这是一篇文字超多的博客,哈哈哈,废话自行过滤··· 遇到问题 在开发中我们常会在ListView , RecycleView 列表中添加EditText输入框,或者checkbox复选框.   复选框 ...

  10. rpm 程序包管理介绍

    API:application program interface ABI:application binary interface linux系统的ABI文件是ELF格式的 windows系统的AB ...