[51nod 1531]树上的博弈
来源:互联网 发布:php导出excel表格 编辑:程序博客网 时间:2024/06/05 14:44
题目描述
有一棵n个点的有根树,他有m个叶子结点(叶子结点是那些没有孩子的结点)。边由父亲指向孩子。数字1到m被分配到每一个叶子中。每一个叶子有一个数字,并且每一个数字恰好被分配到一个叶子中。
刚开始的时候根部有一个棋子。两个玩家轮流移动棋子,每一步都会将这个棋子向他的某一个孩子移动;如果玩家不能再移动棋子了,那么游戏结束。游戏的结果就是棋子所在叶子上面的数字。游戏的先手想要这个数字最大化,而后手想要这个数字最小化。
山巴布里想要给这些叶子分配数字使得最终结果最大,而马族塔想要给这些叶子分配数字使得最终结果最小。那么当山巴布里来分配数字的时候游戏结果会是多少?马族塔分配的时候又是多少呢?山马布里和马族塔并不参加游戏,而是另外两个非常聪明的人来参加游戏。
样例解释:在这个样例中,树有三个叶子:3,4和5。如果把数字3分配给3号结点,那么第一个选手就能够让棋子到达那儿,最终结果就是3。另一方面,很明显,无论怎么分配数字,第一个选手让棋子达到最小数字是2。
DP
考虑最大化怎么做。
假设我的答案是ans,设f[i]表示i子树内需要至少安置多少个>=ans才能使在这个节点往后操作一定能使答案为ans。
显然i是先手操作就对每颗子树的f取min,否则求和。
显然m-f[1]是最大答案。
最小化同理。
#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=200000+10;int f[maxn],d[maxn],h[maxn],go[maxn],next[maxn];int i,j,k,l,r,mid,n,m,ans,tot;void add(int x,int y){ go[++tot]=y; next[tot]=h[x]; h[x]=tot;}void dfs(int x){ int t=h[x]; if (!t){ m++; return; } while (t){ d[go[t]]=d[x]+1; dfs(go[t]); t=next[t]; }}void dg(int x){ int t=h[x]; if (!t){ f[x]=1; return; } if (d[x]%2==0){ f[x]=m+1; while (t){ dg(go[t]); f[x]=min(f[x],f[go[t]]); t=next[t]; } } else{ f[x]=0; while (t){ dg(go[t]); f[x]+=f[go[t]]; t=next[t]; } }}void dg2(int x){ int t=h[x]; if (!t){ f[x]=1; return; } if (d[x]%2==1){ f[x]=m+1; while (t){ dg2(go[t]); f[x]=min(f[x],f[go[t]]); t=next[t]; } } else{ f[x]=0; while (t){ dg2(go[t]); f[x]+=f[go[t]]; t=next[t]; } }}int main(){ scanf("%d",&n); fo(i,1,n-1){ scanf("%d%d",&j,&k); add(j,k); } dfs(1); dg(1); printf("%d ",m-f[1]+1); dg2(1); printf("%d\n",f[1]);}
0 0
- [51nod 1531]树上的博弈
- 树上的博弈 51Nod
- 【51Nod 1531】 树上的博弈(树形DP)
- 【51nod1531】树上的博弈
- 51nod 1490-多重游戏(树上博弈)
- 51Nod-1513-树上的回文
- [51nod 1766]树上的最远点对
- [51NOD 1766]树上的最远点对
- 51nod 1766 树上的最远点对
- 51Nod-1766-树上的最远点对
- 51nod 1067 博弈
- 树上博弈
- 树上博弈
- [51Nod 1677 Treecnt] 树上dfs+排列组合
- 51Nod - Nim游戏(博弈)
- 51nod 1067【简单博弈】
- 51nod 1068【简单博弈】
- 51 nod 1072 威佐夫博弈
- Mysql主从配置,实现读写分离
- 上传本地项目到git
- 获取命令行参数的各种变化
- win10 zlib编译
- 证明支配集问题是NP完全问题
- [51nod 1531]树上的博弈
- java 代理
- 形状属性
- 一个对象的内存图及运行流程和3个对象的内存图的运行流程
- Git实现从本地添加项目到远程仓库
- NOIP 提高组 初赛 四、阅读程序写结果 习题集(三)NOIP2002-NOIP2003
- 【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇
- mac Air如何安全弹出kindle?
- linux git 服务器搭建