#树形dp,二分#UVA1407 Caves 洛谷 3698 [CQOI2017]小Q的棋盘
题目
给定一棵树,现在需要找到一条由节点1出发长度为\(x\)的路径,
问最多经过的节点数,重复经过只计算一次(不一定是简单路径)
UVA的那道题多组数据多组询问,边权还不一定是1,\(n\leq 500\)
分析
设\(dp[x][ans][0/1]\)表示在以\(x\)为根的子树内,
经过的节点数为\(ans\),当前答案的终点是否为点\(x\)的最短路径长度
那么
\]
\]
由于\(\min\{dp[x][ans][0],dp[x][ans][1]\}\)显然具有单调性,所以可以二分
时间复杂度\(O(T(n^2+Qlog_2n))\)
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int N=511; struct node{int y,w,next;}e[N];
int dp[N][N][2],siz[N],as[N],ans[N],n,Test;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed min(int a,int b){return a<b?a:b;}
inline void dfs(int x){
dp[x][1][0]=dp[x][1][1]=0,siz[x]=1;
for (rr int i=as[x];i;i=e[i].next){
dfs(e[i].y),siz[x]+=siz[e[i].y];
for (rr int j=siz[x]-siz[e[i].y];j;--j)
for (rr int o=siz[e[i].y];o;--o){
dp[x][j+o][0]=min(dp[x][j+o][0],dp[x][j][1]+dp[e[i].y][o][0]+e[i].w);
dp[x][j+o][0]=min(dp[x][j+o][0],dp[x][j][0]+dp[e[i].y][o][1]+e[i].w*2);
dp[x][j+o][1]=min(dp[x][j+o][1],dp[x][j][1]+dp[e[i].y][o][1]+e[i].w*2);
}
}
}
signed main(){
while (1){
n=iut(); if (!n) return 0;
printf("Case %d:\n",++Test);
memset(as,0,sizeof(as)),
memset(dp,42,sizeof(dp));
for (rr int i=1;i<n;++i){
rr int x=iut()+1,F=iut()+1,w=iut();
e[i]=(node){x,w,as[F]},as[F]=i;
}
dfs(1);
for (rr int i=1;i<=n;++i)
ans[i]=min(dp[1][i][0],dp[1][i][1]);
for (rr int Q=iut();Q;--Q){
rr int W=iut();
rr int l=1,r=n;
while (l<r){
rr int mid=(l+r+1)>>1;
if (ans[mid]>W) r=mid-1;
else l=mid;
}
print(l),putchar(10);
}
}
}
#树形dp,二分#UVA1407 Caves 洛谷 3698 [CQOI2017]小Q的棋盘的更多相关文章
- BZOJ4813或洛谷3698 [CQOI2017]小Q的棋盘
BZOJ原题链接 洛谷原题链接 贪心或树形\(DP\)都可做,但显然\(DP\)式子不好推(因为我太菜了),所以我选择贪心. 很显然从根出发主干走最长链是最优的,而剩下的点每个都需要走两步,所以用除去 ...
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...
- 洛谷P3698 [CQOI2017]小Q的棋盘
传送门 考虑一个贪心,先在根节点周围转一圈,然后再往下走最长链肯定是最优的 然后设最长链的长度为$d$,如果$m\leq d$,那么答案为$m+1$ 否则的话还剩下$m-d+1$步,又得保证能走回来, ...
- 洛谷 P3700 - [CQOI2017]小Q的表格(找性质+数论)
洛谷题面传送门 又是一道需要一些观察的数论 hot tea-- 注意到题目中 \(b·f(a,a+b)=(a+b)·f(a,b)\) 这个柿子长得有点像求解 \(\gcd\) 的辗转相除法,因此考虑从 ...
- Luogu 3698 [CQOI2017]小Q的棋盘
BZOJ 4813 虽然数据范围很迷人,但是想树形$dp$没有前途. 先发现一个事情,就是我们可以先选择一条链,最后要走到这一条链上不回来,走到链上的点每一个只需要一步,而如果要走这条链之外的点,一个 ...
- luogu 3698 [CQOI2017]小Q的棋盘 树形dp
Code: #include <bits/stdc++.h> #define N 107 #define setIO(s) freopen(s".in","r ...
- [bzoj4815] [洛谷P3700] [Cqoi2017] 小Q的表格
Description 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向你求助.为了完成任务,小Q需要列一个表格 ...
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- 洛咕 P3700 [CQOI2017]小Q的表格
洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...
- [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)
4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 804 Solved: 441[Submit][Statu ...
随机推荐
- go值接收者和指针接收者的区别
方法的接收者 package main import ( "fmt" ) type Person struct { Name string Age int } func (p Pe ...
- Vue3学习(十九) - TreeSelect 树选择
写在前面 我知道自己现在的状态很不好,以为放个假能好好放松下心情,结果昨晚做梦还在工作,调试代码,和领导汇报工作. 天呐,明明是在放假,可大脑还在考虑工作的事,我的天那,这是怎么了? Vue页面参数传 ...
- 【Python语法糖】闭包和装饰器
Python闭包和装饰器 参考: https://zhuanlan.zhihu.com/p/453787908 https://www.bilibili.com/video/BV1JW411i7HR/ ...
- 【算法day4】堆结构、堆排序、比较器以及桶排
堆与堆结构(优先级队列结构) 知识点: 堆结构就是用数组实现的完全二叉树结构 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 堆结构的heapl ...
- SOTIF很快将会取代ISO 26262?为您详细解读SOTIF标准ISO/PAS 21448
SOTIF很快将会取代ISO 26262?为您详细解读SOTIF标准ISO/PAS 21448 根据MES模赛思对其全球客户的问卷调查表明, 尽管有相当一部分的参与者(35%)认为SOTIF在功能安全 ...
- 【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
问题描述 在App Service中,为App Service配置了访问限制,结果导致在克隆App Service的代码时候,遇见403错误. 问题解答 因为在使用 git clone App Ser ...
- 【Azure 应用服务】App Server 部署后,Docker报错,找不到8080端口
问题描述 App Service for Container. Docker Image 推送到ACR(向 Azure 容器注册表), 配置App Service并部署成功了.查看Docker日志( ...
- Big-Yellow的算法工程师进阶之路
Big-Yellow的算法工程师进阶之路 一.基础算法 二.基础数据结构 2.1 链表[1] 2.1.1 基础理论 链表是一种以链的形式来存储数据的数据结构.链表的结构:每一个数据都与其后一个数据相连 ...
- Kubernetes: kube-controller-manager 源码分析
0. 前言 在 Kubernetes 架构中,controller manager 是一个永不休止的控制回路组件,其负责控制集群资源的状态.通过监控 kube-apiserver 的资源状态,比较当前 ...
- TR069-STUN
原理 1.NAT穿越技术,为了解决NAT设备对P2P网络的通信限制 2.作用:检测网络中是否存在NAT设备,并获取两个通信端点经NAT设备分配的IP地址和端口号,然后建立一条可穿越NAT的P2P链 ...