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

Description ​ 有一棵nn个节点的树,第ii条边连接ai,biai,bi,每个节点ii上有AiAi个石子,高桥君和青木君将在树上玩游戏 ​ 首先,高桥君会选一个节点并在上面放一个棋子,然后从高桥君开始,他们轮流执行以下操作: 从当前棋子占据的点上移除一个石子 将棋子移动到相邻节点 ​ 如果轮到一个人执行操作时棋子占据的点上没有石子,那么他就输了 ​ 请你找出所有的点vv,使得如果高桥君在游戏开始时把棋子放到vv上,他可以赢 Input ​ 第一行一个整数nn ​ 第二行nn个整数A1…
C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意dp[v]一开始存的是从根节点到这个节点都选的情况,这样才好往后转移. #include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <cstrin…
http://codeforces.com/contest/463/problem/E 给出一个总节点数量为n的树,每个节点有权值,进行q次操作,每次操作有两种选项: 1. 询问节点v到root之间的路径上的各个节点,求满足条件 gcd(val[i], val[v]) > 1 的 距离v最近的节点的下标. 2. 将节点v的值求改为w. 暴力居然过了! #include <iostream> #include <cstdio> #include <cstring>…
Circles Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5299 Description There are n circles on a infinitely large table.With every two circle, either one contains another or isolates from the other.They are never crossed nor tangent. Alice and…
题意: 给你一个区间[l,r],让你从小到大输出k^x,设y=k^x,要保证y在区间[l,r]中 题解: 就算k是最小的2也不需要枚举多少次就到long long的极限了,所以暴力没商量,根本不会TLE 然后就是爆long long处理,比如r特别大,当k^x=<r但是k^(x+1)就爆long long了,这个要注意一下 代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #in…
Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ymx.yxh 都去打了,可我似乎那时候还在旅游? 不难发现,对于操作 \(i\) 实际上是将 \(a_i\) 与 \(b_i\) 子树的并集内的点的答案集合并上 \(a_i\) 与 \(b_i\) 子树的并集.于是我们考虑将询问离线下来并在树上进行一遍 DFS,动态地维护一个可重集 \(S\).当我们第一次访问…
思路: 叶子节点的SG值为0:中间节点的SG值为它的所有子节点的SG值加1 后的异或和. 详见贾志豪神牛的论文:组合游戏略述 ——浅谈SG游戏的若干拓展及变形 代码如下: #include<cstdio> #include<vector> using namespace std; vector<]; int get_sg(int n,int u) { ; ;i<p[n].size();i++){ +get_sg(p[n][i],n)); } return ans; }…
题意:树上每个点都有颜色,称一个颜色占领一棵子树,当且仅当没有别的颜色在这棵子树内的数量比它多.求所有子树的占领颜色之和.题解:最显然的是DFS序+主席树或莫队,这里使用Dsu on tree. 每次暴力DFS之后,只撤销除重儿子之外的点的贡献.由于重儿子的性质,均摊后复杂度为$O(n\log n)$. #include<cstdio> #include<algorithm> #include<iostream> #define rep(i,l,r) for (int…
Minimal Ratio Tree HDU - 2489 暴力枚举点,然后跑最小生成树得到这些点时的最小边权之和. 由于枚举的时候本来就是按照字典序的,不需要额外判. 错误原因:要求输出的结尾不能有空格. #include<cstdio> #include<cstring> #include<vector> using namespace std; ],ok2[]; ]; int num,n,m; ],b[][]; vector<int> vec; dou…
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和\(A_{i+1}\)之间只会有一个括号:有多个括号的话只保留最外边那个,答案不变. 然后就可以定义状态:\(dp_{i,j}\)表示前\(i\)个数,还有\(j\)个未闭合的左括号,得到的最大答案. 由于只有减号右边有括号,所以只要知道左边有几个未闭合的左括号,就可以知道自己的贡献是\(1\)还是…