LOJ10162 骑士
ZJOI 2008
Z 国的骑士团是一个很有势力的组织,帮会中聚集了来自各地的精英。他们劫富济贫,惩恶扬善,受到了社会各界的赞扬。
可是,最近发生了一件很可怕的事情:邪恶的 Y 国发起了一场针对 Z 国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的 Z 国又怎能抵挡得住 Y 国的军队。于是人们把所有希望都寄托在了骑士团身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。
骑士团是肯定具备打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾。每个骑士有且仅有一个他自己最厌恶的骑士(当然不是他自己),他是绝对不会与最厌恶的人一同出征的。
战火绵延,人们生灵涂炭,组织起一个骑士军团加入战斗刻不容缓!国王交给你了一个艰巨的任务:从所有骑士中选出一个骑士军团,使得军内没有矛盾的两人,即不存在一个骑士与他最痛恨的人一同被选入骑士团的情况,并且使这支骑士军团最富有战斗力。
为描述战斗力,我们将骑士按照 1 至 N 编号,给每位骑士估计一个战斗力,一个军团的战斗力为所有骑士的战斗力之和。
输入格式
输入第一行包含一个正整数 N,描述骑士团的人数;
接下来 N 行每行两个正整数,按顺序描述每一名骑士的战斗力和他最痛恨的骑士。
输出格式
输出包含一行,一个整数,表示你所选出的骑士军团的战斗力。
样例
样例输入
3
10 2
20 3
30 1
样例输出
30
数据范围与提示
对于 30% 的数据,满足 N≤10;
对于 60% 的数据,满足 N≤100;
对于 80% 的数据,满足N≤10^4;
对于 100% 的数据,满足 N≤10^6,且每名骑士的战斗力都是不大于 10^6 的正整数。
_____________________________________________________________________________________________
树形动归,n个点,n条边,那么整个图构成多个联通块,每个块内要么是一棵树,要么是一棵树加一条边构成一个环。
如果是树,直接动归就可以了。
f[u][0]:表示不选当前点的最大战力
f[u][1]:表示选当前点的最大战力
f[u][0]=sum( max( f[v][0],f[v][1] ) )
f[u][1]=sum( f[v][0] )+zl[u];
如果内部是一个树加边,那么环上断开一条边,边的两个端点u,v,他们不能同时取。所以只要求f[u][0]和f[v][0]的较大值就可以了。
_____________________________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn=1e6+10;
5 int n;
6 long long ans;
7 ll zl[maxn];
8 int hen[maxn];
9 struct edge
10 {
11 int u,v,nxt;
12 }e[maxn<<1];
13 int head[maxn],js;
14 void addage(int u,int v)
15 {
16 e[++js].u=u;e[js].v=v;
17 e[js].nxt=head[u];head[u]=js;
18 }
19 bool vis[maxn];
20 long long f[maxn][2];
21 int h1,h2,bz=0,root;
22 void dfs(int u,int fa)
23 {
24 if(vis[u]==0)
25 {
26 vis[u]=1;
27 }
28 else
29 {
30 h1=u;h2=fa;bz=1;
31 return;
32 }
33 for(int i=head[u];i;i=e[i].nxt)
34 {
35 int v=e[i].v;
36 if(v!=fa)dfs(v,u);
37 }
38 }
39 void dp(int u,int fa)
40 {
41 f[u][0]=0;
42 f[u][1]=zl[u];
43 for(int i=head[u];i;i=e[i].nxt)
44 {
45 int v=e[i].v;
46 if(v!=fa && v!=root)
47 {
48 dp(v,u);
49 f[u][0]+=max(f[v][0],f[v][1]);
50 f[u][1]+=f[v][0];
51 }
52 }
53 }
54 int main()
55 {
56 scanf("%d",&n);
57 for(int i=1;i<=n;++i)
58 {
59 scanf("%d%d",&zl[i],&hen[i]);
60 if(hen[hen[i]]==i)continue;
61 addage(i,hen[i]);
62 addage(hen[i],i);
63 }
64 for(int i=1;i<=n;++i)
65 if(!vis[i])
66 {
67 h1=h2=bz=0;
68 dfs(i,0);
69 if(bz==0)
70 {
71 root = i;
72 dp(i,0);
73 ans+=max(f[i][0],f[i][1]);
74 }
75 else
76 {
77 root=h1;dp(h1,h2);long long tp=f[h1][0];
78 root=h2;dp(h2,h1);
79 ans+=max(tp,f[h2][0]);
80 }
81 }
82 cout<<ans;
83 return 0;
84 }
LOJ10162 骑士的更多相关文章
- COGS746. [网络流24题] 骑士共存
骑士共存问题«问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘 上某些方格设置了障碍,骑士不得进入. «编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志 ...
- 【BZOJ1671】[Usaco2005 Dec]Knights of Ni 骑士 BFS
[Usaco2005 Dec]Knights of Ni 骑士 Description 贝茜遇到了一件很麻烦的事:她无意中闯入了森林里的一座城堡,如果她想回家,就必须穿过这片由骑士们守护着的森林.为 ...
- 骑士游历/knight tour - visual basic 解决
在visual baisc 6 how to program 中文版第七章的练习题上看到了这个问题,骑士游历的问题. 在8x8的国际象棋的棋盘上,骑士(走法:一个方向走两格,另一个方向一格)不重复走完 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- BZOJ 1040 【ZJOI2008】 骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- 【BZOJ-1040】骑士 树形DP + 环套树 + DFS
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3312 Solved: 1269[Submit][Status ...
- BZOJ1040 [ZJOI2008]骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战 ...
- BFS 骑士的移动
骑士的移动 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/E 题目: Description A f ...
- LA 3523 圆桌骑士
题目链接:http://vjudge.net/contest/141787#problem/A http://poj.org/problem?id=2942 此题很经典 知识点:DFS染色,点-双连通 ...
随机推荐
- CentOS 7 Xinetd服务安装配置
CentOS 7 Xinetd服务安装配置 目录 CentOS 7 Xinetd服务安装配置 一.Linux守护进程与初始化进程 1. 什么是守护进程 2. 什么是初始化 二.Linux独立启动进程和 ...
- Asp.net Core 2.0 实现Cookie会话
与1.0版本相比微软做了一些调整.详细请参考官方文档,我这里就讲2.0的吧 1.首先要在 根目录下 Startup.cs 类中启用 cookie会话,有两处要配置 第一处在 public void ...
- jq 右键菜单在弹出菜单前如果需要显示与否的判断相关操作
菜单插件(ContextMenu)接收一个额外的参数对象来设置菜单项的样式和绑定鼠标事件. 菜单插件(ContextMenu)支持一下参数设置: bindings 包含id的对象:函数组. 当关联的菜 ...
- 你真会看idea中的Log吗?
在项目中提交代码时,我们时常忘了自己是否已经update代码或者push代码了,或者以为自己push,但是别人说你的代码没push,其实可以通过idea的Log日志中查看,你会发现里面有三种颜色的标签 ...
- 如何不使用 overflow: hidden 实现 overflow: hidden
一个很有意思的题目.如何不使用 overflow: hidden 实现 overflow: hidden? CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么 ...
- 计算机考研复试真题 abc
题目描述 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc=532.求满足条件的所有a.b.c的值. 输入描述: 题目没有任何输入. 输出描述: 请输出所有满足题目条 ...
- SpringBoot整合Shiro完成验证码校验
SpringBoot整合Shiro完成验证码校验 上一篇:SpringBoot整合Shiro使用Redis作为缓存 首先编写生成验证码的工具类 package club.qy.datao.utils; ...
- 四:WEB源码扩展
前言:WEB源码在安全测试中是非常重要的信息来源,可以用来进行代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析,获取某ASP源码后就可以采用默认数据库下载为突破,获取某其他脚本 ...
- 容器编排系统K8s之Prometheus监控系统+Grafana部署
前文我们聊到了k8s的apiservice资源结合自定义apiserver扩展原生apiserver功能的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/ ...
- 【Linux】ps -ef 和ps aux 的区别
Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格, ...