题目大意

桌面上有n堆石子,第i堆中有a[i]个石子,你和你的好朋友玩NIM游戏。你很绅士的让你的好朋友先手,但是,为了展示自己的聪明才智,你想确保自己能够胜利。于是,趁你好朋友不在的时候,你悄悄地从口袋里摸出一些石子,并决定在桌面上若干石子堆中放入一些新石子,并从若干个石子堆中拿走一些石子(可以取完石子堆,但是不能创造新的石子堆)你希望在新的游戏局面中确保自己必胜,同时,为了避免被发现,你对现有局面不能改动过大,因此,我们定义,对取走和放入的每个石子,你需要支付一点代价。你想知道,要得到一个自己必胜的游戏局面,最少需要支付多少代价。

解题思路

我们的目标是使异或和为零,从高到低位枚举,要变的情况我们有两种决策,把最小的1压倒刚刚好为0,把最大的0升到刚好为1,优先选当前代价最少的,最优性剪枝即可。

code

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LD double
#define LL long long
#define ULL unsigned long long
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define fr(i,j) for(int i=begin[j];i;i=next[i])
using namespace std;
int const mn=1e5+9,mp=8*1e6+9,con=1e5+1,inf=1e9;
int n,gra,begin[mn],to[mn],next[mn],a[mn],b[mn],c[mn],dep[mn],du[mn],fail[mn],q[mn],fa[mn],pon=1;LL ans;
void insert(int u,int v){to[++gra]=v;next[gra]=begin[u];begin[u]=gra;
}
void dfs(int now){fr(i,now){dep[to[i]]=dep[now]+1;dfs(to[i]);}
}
int main(){freopen("route.in","r",stdin);freopen("route.out","w",stdout);scanf("%d",&n);int u,v;fo(i,1,n-1){scanf("%d%d",&u,&v);insert(v,u);fa[u]=v;du[u]++;du[v]++;}dep[1]=1;dfs(1);LL ans=0;fo(i,1,n){ans+=dep[i];if(dep[i]>dep[a[du[i]]])a[du[i]]=i;}fo(i,1,n){int now=a[i];if(now){fo(j,1,n)if(j!=now){int u=now,v=j;while(u&&v&&(du[u]==du[v]))ans--,u=fa[u],v=fa[v];}}}printf("%lld\n",ans);return 0;
}

【jzoj5053】【石子游戏】【搜索】相关推荐

  1. 搜索与回溯:取石子游戏

    1218:取石子游戏 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 4790     通过数: 2208 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候, ...

  2. leetcode——石子游戏系列题目

    石子游戏 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历 ...

  3. 博弈论之取石子游戏的学习

    以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策 游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输 对任何一种局面,胜负只决定于局 ...

  4. LeetCode 1140.石子游戏 II

    题目描述 爱丽丝和鲍勃继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = 1. 在每 ...

  5. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  6. HDUOJ-----2175取(m堆)石子游戏

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. bzoj1874: [BeiJing2009 WinterCamp]取石子游戏

    1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 834  Solved: 350 ...

  8. leetcode算法题--石子游戏 II★★

    原题链接:https://leetcode-cn.com/problems/stone-game-ii/ 相关题目:石子游戏 动态规划: dp[i][j]表示在i~n-1堆石子中,最多拿前2*j堆时先 ...

  9. Leetcode1686. 石子游戏 VI[C++题解]:博弈论、按照a+b贪心

    文章目录 题目分析 题目链接 题目分析 博弈论:最坏情况下求最好. 按a[i]+b[i]a[i] + b[i ]a[i]+b[i] 从大到小排序 解释: (博弈论)每个人最优的选择都是 要求自己的−对 ...

  10. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

最新文章

  1. 也谈谈程序员职业规划的几个问题——我的一些故事
  2. Python学习总结(一)
  3. Spring为什么建议使用构造器来注入?
  4. Android的开机流程及对应源码位置分析
  5. MySQL row_format引发的案例一则
  6. MySql中的运算符
  7. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
  8. hive 创建访问用户_hive创建角色并赋权
  9. gbdt和xgboost中feature importance的获取
  10. react 全选反选_js中怎么将createElement出来的复选框实现全选,全不选,反选效果?...
  11. 干货收藏!史上最强 Tomcat 8 性能优化来啦!| 原力计划
  12. web留言板整蛊网站愚人节
  13. Spring+Spring MVC+MyBatis实现SSM框架整合详细教程【转】
  14. 选择防身武器,利用身边的物品才是王道
  15. windows安装sonarqube7.4+sonar-scanner-cli【JDK8+MySQL】
  16. 动态代理及JDK动态代理源码分析
  17. 【Java知识点总结】Java 变量
  18. 【笔试】三七互娱笔试 web后端工程师
  19. 深读源码-java同步系列简介
  20. 【SSM整合】SSM详细整合-maven分模块架构

热门文章

  1. Openwrt中安装njit-client(njit8021xclient)及使用方法
  2. 黑苹果日记六(双系统引导)
  3. pythonpandas入门_pyhton pandas数据分析基础入门(一文看懂pandas)
  4. ubuntu 安装 flash 软件 卸载
  5. Ubuntu 安装 brightness-controller 调节显示亮度
  6. oo结尾的单词发音规律
  7. 如果可以不上班《不上班的23种活法》免费下载及经典语录
  8. 富士通Fujitsu DPK1180K 打印机驱动
  9. ZedBoard 最小系统构建 (一)-硬件结构搭建
  10. CommScope将收购ARRIS:交易金额约达74亿美元,将加速实现CommScope塑造未来通信网络的愿景