1040: [ZJOI2008]骑士

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 5210  Solved: 1987
[Submit][Status][Discuss]

Description

  Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各
界的赞扬。最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争。战火绵延五百里,在和平环境
中安逸了数百年的Z国又怎能抵挡的住Y国的军队。于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一
个真龙天子的降生,带领正义打败邪恶。骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一
些矛盾。每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不会与自己最厌恶的人一同出
征的。战火绵延,人民生灵涂炭,组织起一个骑士军团加入战斗刻不容缓!国王交给了你一个艰巨的任务,从所有
的骑士中选出一个骑士军团,使得军团内没有矛盾的两人(不存在一个骑士与他最痛恨的人一同被选入骑士军团的
情况),并且,使得这支骑士军团最具有战斗力。为了描述战斗力,我们将骑士按照1至N编号,给每名骑士一个战
斗力的估计,一个军团的战斗力为所有骑士的战斗力总和。

Input

  第一行包含一个正整数N,描述骑士团的人数。接下来N行,每行两个正整数,按顺序描述每一名骑士的战斗力
和他最痛恨的骑士。

Output

  应包含一行,包含一个整数,表示你所选出的骑士军团的战斗力。

Sample Input

3
10 2
20 3
30 1

Sample Output

30

HINT

N ≤ 1 000 000,每名骑士的战斗力都是不大于 1 000 000的正整数。

Source

题意:给出基环树林,求最大点权独立集。

思路:

对于每棵基环树,我们找到环上的一条边,设边上的两端点分别为u和v,f[i]为以i为根的子树在取i点的情况下的最大权值,g[i]为不取,于是我们有以下做法: 
1.断掉这条边 
2.u不取,v任意,我们以u为根跑一遍树形DP,取g[u] 
3.v不取,u任意,我们以v为根跑一遍树形DP,取g[v] 
4.取上述两个值中的最大值,记入ans

吐槽:考试的时候跑的网络流求最大点权独立集,然后跑最小割,求最小点权覆盖集,然后总的和值-最小点权覆盖集就是答案。然后全部WA了┭┮﹏┭┮,求大神找错QWQ后来才知道是建图建错了,而网络流会TLE。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2000101
using namespace std;
int n,U,V,E,tot=1;
long long ans,f[MAXN],g[MAXN];
int val[MAXN],vis[MAXN];
int to[MAXN*2],net[MAXN*2],head[MAXN*2];
void add(int u,int v){to[++tot]=v;net[tot]=head[u];head[u]=tot;to[++tot]=u;net[tot]=head[v];head[v]=tot;
}
void dfs(int now,int fa){vis[now]=1;for(int i=head[now];i;i=net[i])if((i^1)!=fa){if(vis[to[i]]){U=now;V=to[i];E=i;continue;}dfs(to[i],i);}
}
void dp(int now,int from,int dont){f[now]=val[now];g[now]=0;for(int i=head[now];i;i=net[i])if((i^1)!=from&&i!=dont&&(i^1)!=dont){dp(to[i],i,dont);f[now]+=g[to[i]];g[now]+=max(g[to[i]],f[to[i]]);}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d%d",&val[i],&x);add(i,x);    }for(int i=1;i<=n;i++)if(!vis[i]){dfs(i,0);dp(U,0,E);long long bns=g[U];dp(V,0,E);bns=max(bns,g[V]);ans+=bns;}cout<<ans;
}

转载于:https://www.cnblogs.com/cangT-Tlan/p/7602482.html

bzoj 1040 1040: [ZJOI2008]骑士相关推荐

  1. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3054  Solved: 1162 [Submit] ...

  2. 基环树DP(bzoj 1040: [ZJOI2008]骑士)

    树:n个点n-1条边的连通图 基环树:n个点n条边的连通图,也就是一个环套着多棵树 基环树DP:找到环上任意相邻两点,断掉这两点之间的边,就形成了一棵树 之后对这两点分别进行一次树形DP即可 例题: ...

  3. BZOJ1040: [ZJOI2008]骑士

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5332  Solved: 2023 [Submit][Stat ...

  4. P2607 [ZJOI2008]骑士

    P2607 [ZJOI2008]骑士 题意: n个点n个边,每个点都有权值,相邻的点不能同时选择,问如何选择能使得权值最大 题解: 这个题很有P1352 没有上司的舞会这个题的感觉,唯一的区别是那个题 ...

  5. 1584 ZJOI2008 骑士

    首先声明:下面是关于这道题的某位大佬博主的解答代码作解释,代码出处为1584 ZJOI2008 骑士(Bzoj1040 LOJ10162 LUOGU2607 省选/NOI-) 枚举组合数30分 类01 ...

  6. bzoj 1040: [ZJOI2008]骑士

    第一次做环套树的题 这道题题目中貌似是有向边,实际上想一想就知道是无向的. 因为一个骑士觉得另一个骑士丑他们俩就走不到一起. 所以整个图实际上是一个无向环套树森林. 对于每一棵环套树,先dfs找环,找 ...

  7. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  8. BZOJ 1040 [ZJOI2008]骑士

    内向树dp~ 就是先找环,任取环上有边相连两点,u和v,以u为根,断开u和v之间的边,做两次树形dp,dp[i][0]表示i不选,dp[i][1]表示i选 ①强制u不选,v随意 ②u随意,v不选 两种 ...

  9. 1040: [ZJOI2008]骑士

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7113  Solved: 2797 [Submit][Status][Discuss] Descri ...

最新文章

  1. 实现数组字符串翻转的两种方法
  2. 手机端viewport的设置规范
  3. python 按钮事件_从django vi中的按钮获取click事件
  4. Squid 代理服务器 编译源码 伪造HTTP_X_FORWARDED_FOR 请求头
  5. 从《王者荣耀》来聊聊游戏的帧同步
  6. dlib+vs2013+opencv实现人脸特征点检测
  7. 安装oracle到create inventory时卡住了怎么办_win10系统安装教程(官方工具)
  8. editplus来编写SQL
  9. 怎样删了系统升级服务器,如何优雅的搞垮服务器,再优雅的救活
  10. python识别验证码ocr_Python3使用tesserocr识别字母数字验证码
  11. Android/Linux性能分析工具推荐
  12. 事件对象以及事件委托(pink老师笔记)
  13. 微软正式发布Internet Explorer 7.0
  14. python while true_小疯谈python(十):程序的控制结构
  15. macbook excel导入html,mac版本怎么把网页数据导入Excel
  16. 关于小米笔记本pro频繁蓝屏问题
  17. win10自带看图工具找不到了咋办
  18. 雷军做程序员时写的博客,真心强啊。。
  19. android t渐变立体按钮,Android 多色渐变按钮
  20. aardio部署_aardio写网站部署到服务器步骤

热门文章

  1. Adversarial Examples:Attacks and Defenses for Deep Learning Networks
  2. ubuntu查找qt安装的路径_Ubuntu上Qt安装以及配置完整步骤
  3. matlab function_Matlab绘制地图
  4. Manage multiple Spring Boot run configurations in the Services tool window
  5. CSharp编写文件对话框类出现的编译错误以及部分解决策略
  6. 邱关源电路第5版笔记和课后答案
  7. 高德纳2019十大战略科技趋势 - Gartner Top 10 Strategic Technology Trends for 2019
  8. 多租户物联网平台服务器框架
  9. 如何用visual studio 2017建立一个python项目并且编写一段简单代码
  10. 24个基本指标精粹讲解(21)--OBOS