题目内容

洛谷链接

有\(n\)位骑士,每个人的战力可能不同,并且每一个人都有且仅有一个憎恨的人,互相憎恨的人不能在同一队中。

求组合为一个骑士队的最大战斗力。

PS:可以去看看题目背景学学历史(雾)

输入格式

第一行包含一个正整数\(n\),描述骑士团的人数。

接下来\(n\)行,每行两个正整数,按顺序描述每一名骑士的战斗力和他最痛恨的骑士。

数据范围

\(n ≤ 1 000 000\),每名骑士的战斗力都是不大于$ 1 000 000$的正整数。

输出格式

输出最大战斗力。

样例输入

3

10 2

20 3

30 1

样例输出

30

思路

参考没有上司的舞会

不过还是稍有不同,因为没有上司的舞会是个树,而此题是个有向图,可能存在环之类的。

可以把环断开,两个端点分别深搜。

数组为\(dp[1000000][2]\),第二维若为1表示选\(i\)点,0则表示不选。用\(j\)表示\(i\)的憎恨者。

转移方程:

\(
\begin{cases}
f[i][1]+=f[j][0],\\
f[i][0]+=max(f[j][0],f[j][1]).\\
\end{cases}
\)

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=1e6+10;
  5. const int INF=0x3f3f3f3f;
  6. int n;
  7. ll ans;//可能超int
  8. ll hater[maxn],fight[maxn],dp[maxn][2];
  9. bool vis[maxn];
  10. struct Node{
  11. int x,y;
  12. }c[maxn];
  13. int cnt,head[maxn];
  14. void add(int x,int y){
  15. c[++cnt].x=head[x];
  16. c[cnt].y=y;
  17. head[x]=cnt;
  18. }
  19. void dfs(int x,int g){
  20. vis[x]=1;
  21. dp[x][1]=fight[x];
  22. dp[x][0]=0;
  23. for(int i=head[x];i;i=c[i].x)
  24. if(c[i].y!=g){
  25. dfs(c[i].y,g);
  26. dp[x][1]+=dp[c[i].y][0];
  27. dp[x][0]+=max(dp[c[i].y][0],dp[c[i].y][1]);
  28. }
  29. else dp[c[i].y][1]=-INF;
  30. }
  31. void find(int x){
  32. while(!vis[x]){
  33. vis[x]=1;
  34. x=hater[x];
  35. }
  36. dfs(x,x);
  37. ll temp=max(dp[x][1],dp[x][0]);
  38. x=hater[x];
  39. dfs(x,x);
  40. ans+=max(temp,max(dp[x][1],dp[x][0]));
  41. }
  42. int main(){
  43. scanf("%d",&n);
  44. for(int i=1;i<=n;i++){
  45. int x;
  46. scanf("%lld%d",&fight[i],&x);
  47. add(x,i);
  48. hater[i]=x;
  49. }
  50. for(int i=1;i<=n;i++)
  51. if(!vis[i])find(i);
  52. printf("%lld",ans);
  53. return 0;
  54. }

【树形DP】ZJOI2008 骑士的更多相关文章

  1. 【树形DP】骑士

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

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

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

  3. 【BZOJ1040】[ZJOI2008]骑士 树形DP

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

  4. [ZJOI2008]骑士(基环树,树形dp)

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

  5. 「树形DP」洛谷P2607 [ZJOI2008]骑士

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

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

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

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

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

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

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

  9. 洛谷P2607 [ZJOI2008]骑士(树形dp)

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

  10. BZOJ 1040 [ZJOI2008]骑士 (基环树+树形DP)

    <题目链接> 题目大意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的 ...

随机推荐

  1. Python基础 读取二进制文件

    问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- ""&q ...

  2. RabbitMQ和Kafka的高可用集群原理

    前言 小伙伴们,通过前边文章的阅读,相信大家已经对RocketMQ的基本原理有了一个比较深入的了解,那么大家对当前比较常用的RabbitMQ和Kafka是不是也有兴趣了解一些呢,了解的多一些也不是坏事 ...

  3. python基础:日志模块logging,nnlog

    python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中.也可以两个操作都执行 1.控制台输入 import logging#导入模块 lo ...

  4. random模块的应用

  5. PHP之道(PHP The Right Way)

    原文地址:http://laravel-china.github.io/php-the-right-way/

  6. 再学ajax--第二天 | 基于php+mysql+ajax的表单注册、登录、注销

    写在前面 ajax学习到了第二天,这次是用第一天封装的ajax函数,后端使用了php+mysql实现基本的注册,登录,注销. php是我前几个月get到的技能,我已经学习到了面向对象,知道各修饰符的含 ...

  7. 【小白学PyTorch】12 SENet详解及PyTorch实现

    文章来自微信公众号[机器学习炼丹术].我是炼丹兄,有什么问题都可以来找我交流,近期建立了微信交流群,也在朋友圈抽奖赠书十多本了.我的微信是cyx645016617,欢迎各位朋友. 参考目录: @ 目录 ...

  8. 7.Semaphore-信号量

  9. 使用binlog2sql恢复数据

    binlog2sql 是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等.主要用途如 ...

  10. goto 无条件跳转

    0. 基本模型 goto 顾言思义,是跳转的意思. goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码. 所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的. g ...