Description

​ 有一棵nn个节点的树,第ii条边连接ai,biai,bi,每个节点ii上有AiAi个石子,高桥君和青木君将在树上玩游戏

​ 首先,高桥君会选一个节点并在上面放一个棋子,然后从高桥君开始,他们轮流执行以下操作:

  • 从当前棋子占据的点上移除一个石子
  • 将棋子移动到相邻节点

​ 如果轮到一个人执行操作时棋子占据的点上没有石子,那么他就输了

​ 请你找出所有的点vv,使得如果高桥君在游戏开始时把棋子放到vv上,他可以赢

Input

​ 第一行一个整数nn

​ 第二行nn个整数A1⋯nA1⋯n

​ 接下来行每行两个整数ai,biai,bi表示一条边

Output

​ 以编号递增的顺序在一行中输出所有满足条件的点

Sample Input

Sample Input #1
3
1 2 3
1 2
2 3 Sample Input #2
5
5 4 1 2 3
1 2
1 3
2 4
2 5 Sample Input #3
3
1 1 1
1 2
2 3

Sample Output

Sample Output #1
2 Sample Output #2
1 2 Sample Output #3

HINT

​ 注意答案可能是一个空行

​ 2≤n≤30002≤n≤3000

​ 1≤ai,bi≤n1≤ai,bi≤n

​ 0≤Ai≤1090≤Ai≤109

​ 给出的边构成一棵树

Sol

这道题的数据范围非常小,能够承受\(O(n^2)\)暴力,所以我们枚举哪个点为根,然后进行判断,显然如果一个点是必胜的话,那么存在一个子节点,使得\(v[x]>v[sonx]\)且\(sonx\)是必败态。我们视叶子结点为必败态,然后进行一遍dfs,即可得出根节点的状态。

证明:首先如果\(v[x]<=v[sonx]\),那么后手完全可以和先手在两个点反复耗下去,于是先手就输了,而必胜态->必败态则是常识。如果有一个点满足上述两个条件,那么后手无论如何也没有能力转入新的必败态。

code

#include <bits/stdc++.h>
using namespace std;
int a[3005],x,y,n;vector<int>e[3005];
int dfs(int x,int fa)
{
for(int i=0;i<e[x].size();i++) if(e[x][i]!=fa&&a[x]>a[e[x][i]]&&!dfs(e[x][i],x)) return 1;
return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<n;i++) scanf("%d%d",&x,&y),e[x].push_back(y),e[y].push_back(x);
for(int i=1;i<=n;i++) if(dfs(i,0)) printf("%d ",i);
}

【AGC010F】Tree Game 博弈论+暴力的更多相关文章

  1. C. Ilya And The Tree 树形dp 暴力

    C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...

  2. Codeforces Round #264 (Div. 2) E. Caisa and Tree 树上操作暴力

    http://codeforces.com/contest/463/problem/E 给出一个总节点数量为n的树,每个节点有权值,进行q次操作,每次操作有两种选项: 1. 询问节点v到root之间的 ...

  3. HDU 5299 Circles Game 博弈论 暴力

    Circles Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5299 Description There are n circles on ...

  4. Link/Cut Tree CodeForces - 614A 暴力+爆 long long 处理

    题意: 给你一个区间[l,r],让你从小到大输出k^x,设y=k^x,要保证y在区间[l,r]中 题解: 就算k是最小的2也不需要枚举多少次就到long long的极限了,所以暴力没商量,根本不会TL ...

  5. Codeforces 258E - Little Elephant and Tree(根号暴力/线段树+标记永久化/主席树+标记永久化/普通线段树/可撤销线段树,hot tea)

    Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ym ...

  6. hdu 3094 A tree game 博弈论

    思路: 叶子节点的SG值为0:中间节点的SG值为它的所有子节点的SG值加1 后的异或和. 详见贾志豪神牛的论文:组合游戏略述 ——浅谈SG游戏的若干拓展及变形 代码如下: #include<cs ...

  7. [CF600E]Dsu on tree

    题意:树上每个点都有颜色,称一个颜色占领一棵子树,当且仅当没有别的颜色在这棵子树内的数量比它多.求所有子树的占领颜色之和.题解:最显然的是DFS序+主席树或莫队,这里使用Dsu on tree. 每次 ...

  8. Minimal Ratio Tree HDU - 2489

    Minimal Ratio Tree HDU - 2489 暴力枚举点,然后跑最小生成树得到这些点时的最小边权之和. 由于枚举的时候本来就是按照字典序的,不需要额外判. 错误原因:要求输出的结尾不能有 ...

  9. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

随机推荐

  1. 2014.8.25 VS新建项目模板消失解决方法

    Vs2005 新建项目时windows应用程序模板消失问题解决方法: 1:进入C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\ ...

  2. Libevent使用例子,从简单到复杂

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39670221 本文从简单到复杂,展示如何使用libevent.网上的许多例子都是只有服务 ...

  3. mysql 存储过程 编写注意事项

    mysql的存储过程有很多需要注意的地方,一不留神就会出错,可能调试了老半天才发现原因 1  没有return 语句 可以采用leave代替,返回直接使用select语句 比如select 1: 2. ...

  4. JDK的安装和环境配置

    安装环境:网上下载的JDK一般都包含JRE在里面,安装JDK完成后会提示接着装JRE,如果没提示再去下载另装如:jdk_8u101_windows_x64_8.0.1010.13 配置环境:新建系统变 ...

  5. Hadoop对数据仓库的影响

    转载http://www.dwway.com/portal.php?mod=view&aid=9065 在过去三年,Hadoop生态系统已经大范围扩展,很多主要IT供应商都推出了Hadoop连 ...

  6. OpenCV的Rect矩形类用法

    转自 http://blog.csdn.net/kh1445291129/article/details/51149849 //如果创建一个Rect对象rect(100, 50, 50, 100),那 ...

  7. 【Docker官方文档】理解Docker

    本文来自Docker的官方文档,详细介绍了Docker的体系结构.重要概念.内部工作机理等内容,推荐不了解Docker内部原理的同学阅读. 什么是Docker? Docker是一个用于开发.交付和运行 ...

  8. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  9. Solidity mapping循环

    https://medium.com/@blockchain101/looping-in-solidity-32c621e05c22

  10. 19. AUTO INCREMENT 字段

    Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...