题目链接


给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜。求能让A获胜的最小的k。

好像洛谷给的N数据范围是1e5级别的。

于是,如果直接查的话,好想不大好查,但是如果我们现在假设一个答案k,然后呢,我们判断这个k是否可以满足这个条件,这样的做法会更好一些。

当我们假设一个k的时候,就可以判断它的可行性了,如果现在B要往树的某个方向走,那么它肯定选择的是最优的策略,因为再返回回来,走回头路一定不是最优的,现在用dp来辅助这个问题,表示走u的子树的某条链的最多需要被染色的节点的个数(用的是除了这K次以外的次数)。

于是,可以确定dp方程:假设u是v的父亲节点,是不包含父亲节点的度数;

其中表示的意思就是,由于我们需要先染色,所以为了避免下一步就直接存在B可以走到未染色的点,所以需要至少个点染色;然后,由于不确定B走的方向,所以还需要知道所有的需要被染色的点的个数,由于有K个可以染色的次数,所以就可以减去K次。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define pii pair<int, int>
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e5 + 7;
int N, du[maxN] = {0};
namespace Graph
{int head[maxN], cnt;struct Eddge{int nex, to;Eddge(int a=-1, int b=0):nex(a), to(b) {}} edge[maxN << 1];inline void addEddge(int u, int v){edge[cnt] = Eddge(head[u], v);head[u] = cnt++;}inline void _add(int u, int v) { addEddge(u, v); addEddge(v, u); du[u]++; du[v]++; }inline void init(){cnt = 0;for(int i=1; i<=N; i++) head[i] = -1;}
};
using namespace Graph;
ll K;
ll dp[maxN];
void dfs(int u, int fa)
{int sum = 0;for(int i=head[u], v; ~i; i=edge[i].nex){v = edge[i].to;if(v == fa) continue;dfs(v, u);sum += dp[v];}dp[u] = 0;for(int i=head[u], v; ~i; i=edge[i].nex){v = edge[i].to;if(v == fa) continue;dp[u] = max(dp[u], sum + du[u] - K);}
}
bool check(int lim)
{K = lim;dfs(1, 0);return dp[1] == 0;
}
int main()
{scanf("%d", &N);init();for(int i=1, u, v; i<N; i++){scanf("%d%d", &u, &v);_add(u, v);}for(int i=2; i<=N; i++) du[i] --;int l = 0, r = N - 1, mid, ans = N - 1;while(l <= r){mid = HalF;if(check(mid)){r = mid - 1;ans = mid;}else{l = mid + 1;}}printf("%d\n", ans);return 0;
}

[POI2013]LUK-Triumphal arch【树形DP+二分答案】相关推荐

  1. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  2. poj 3208 Apocalypse Someday 数位dp+二分答案

    Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 2203   Accepted: 11 ...

  3. HDU3585 Information Disturbing 树形dp+二分

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能 ...

  4. D. Serval and Rooted Tree(思维+树形dp+二分辅助)

    https://codeforces.com/problemset/problem/1153/D 思路:参考issue https://issue-is-vegetable.blog.csdn.net ...

  5. 【题解】hdu 3586 Information Disturbing 二分 树形dp

    题目描述 Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Jav ...

  6. P3994 高速公路 树形DP+斜率优化+二分

    $ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...

  7. LibreOJ #2478.「九省联考 2018」林克卡特树 树形dp+带权二分

    题意 给出一棵n个节点的树和k,边有边权,要求先从树中选k条边,然后把这k条边删掉,再加入k条边权为0的边,满足操作完后的图仍然是一棵树.问新树的带权直径最大是多少. n,k≤3∗105n,k≤3∗1 ...

  8. P4383 [八省联考2018]林克卡特树(树形dp+wqs二分)

    [八省联考2018]林克卡特树 题目大意:给定一棵有负权边的树,现在必须恰好删去 k k k条边,并加上恰好 k k k条权值为 0 0 0的边,要求最大化它的直径长度. 首先考虑删去 K K K条边 ...

  9. 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)

    P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...

  10. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

最新文章

  1. 安装完毕freebsd的后续工作,安全设置及其他(适合新手)
  2. 傅奎:十年安全路,一颗好奇心
  3. mysql数据库设计原则_mysql数据库设计总结
  4. 《phrack》黑客杂志
  5. 组合数学+gcd BZOJ3505 [Cqoi2014]数三角形
  6. python输出名字和字数_Python字数和排名
  7. 大学计算机信息技术实验与测试教程第2版,大学信息技术实验指导
  8. 工程模式写入imei_开发初期IMEI号的写入
  9. 图像特征提取之Haar特征
  10. Linux 系统设置图形界面启动和黑窗口启动
  11. java中使用libreoffice将word转换成pdf格式
  12. 创业管理:创业者的十八般武艺——1.2 创业者素质体系(1)
  13. Parallel()
  14. React-Native强制关闭软键盘
  15. CUDA11.7安装-C盘杀手(含卸载和安装教程)
  16. uni-app App端优化
  17. Python中以字母r/R,或字母u/U 开头的字符串
  18. CPU、程序和设备三者的关系
  19. CVPR 2022 | Adobe把GAN搞成了缝合怪!凭空P出一张1024分辨率全身人像
  20. 视频教程-Unity3D实战入门之第三人称射击游戏(TPS)-Unity3D

热门文章

  1. Android 强制设置应用横屏或竖屏
  2. 操作系统小和尚挑水,老和尚喝水问题
  3. 普洛斯与宁德时代签署战略合作协议;高博昌平国际研究型医院成为北京自贸区首批签约项目 | 美通企业日报...
  4. 03—C语言基本语句(下)
  5. 如何使用python刷博客浏览量---第一种方法
  6. 国外50所大学开放课程
  7. VOCs废气处理设备-粤信环保
  8. c++11总结21——atomic_flag
  9. 李一男复出,能否完成一次“永不言败”的创业?
  10. VC、PE和天使投资的解释与区别?