HDU - 6769-In Search of Gold-二分+树形dp
https://vjudge.net/problem/HDU-6769
题目大意:给你n个点,有n-1条边,每条边有a,b两个权值,给你一个k,恰好有k条边的权值取a,其余取b的时候,树的直径的最小值。
思路:答案具有单调性直接二分直径(在比赛的时候我压根想不到),然后用这个直径对树形dp做一个限制,如果链权值相加大于mid的时候则不转移状态。dp【i】【j】代表i的子树中选择了j条边取a权值的情况下,从i出发能达到最远就距离。(类似树上背包吧)
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define sc second
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define ac cout<<ans<<"\n"
#define pb push_back
#define endl '\n'
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=998244353;
const ll N =5e5+10;
const ll M =250000;
const double eps = 1e-4;
//const double pi=acos(-1);
ll re(){ll x;scanf("%lld",&x);return x;
}
int n,k;
struct p{int to,nex;pii w;
}e[N];
int h[N];
ll dp[20010][21],temp[100];
int siz[20010];
int idx;
void add(int u,int v,ll a,ll b){e[idx]={v,h[u],{a,b}};h[u]=idx++;
}
void dfs(int u,int fa,ll mid){siz[u]=dp[u][0]=0;for(int i=h[u];~i;i=e[i].nex){int v=e[i].to;if(v==fa) continue;dfs(v,u,mid);int num=min(siz[u]+siz[v]+1,k);for(int j=0;j<=num;j++) temp[j]=mid+1;for(int j=0;j<=min(siz[u],num);j++){for(int p=0;p<=min(siz[v],num)&&j+p<=num;p++){if(p+j+1<=num&&dp[u][j]+dp[v][p]+e[i].w.fi<=mid)temp[j+p+1]=min(temp[j+p+1],max(dp[u][j],dp[v][p]+e[i].w.fi));if(dp[u][j]+dp[v][p]+e[i].w.sc<=mid)temp[j+p]=min(temp[j+p],max(dp[u][j],dp[v][p]+e[i].w.sc));}}siz[u]+=siz[v]+1;for(int j=0;j<=num;j++) dp[u][j]=temp[j];}}
void slove(){n=re(),k=re();for(int i=1;i<=n;i++) h[i]=-1;idx=0;ll l=0,r=0;for(int i=1;i<n;i++){ll u=re(),v=re(),a=re(),b=re();add(u,v,a,b);add(v,u,a,b);r+=max(a,b);}ll ans=0;while(l<=r){ll mid=(l+r)/2;dfs(1,0,mid);if(dp[1][k]<=mid){ans=mid;r=mid-1;}else l=mid+1;}cout<<ans<<endl;
}int main(){int t;t=re();while(t--) slove();return 0;
}
HDU - 6769-In Search of Gold-二分+树形dp相关推荐
- 【题解】hdu 3586 Information Disturbing 二分 树形dp
题目描述 Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Jav ...
- 吉吉王国(二分+树形dp)
吉吉王国 题意: n个点,m个边,有边权,现在要求叶子节点无法与1号点连通,要求切断的总长度不能超过m,且切断的最长的长度尽可能断 题解: 题意的前半部分可以确定是树形dp,后半部分可以确定为是二分 ...
- hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...
- hdu 1520 Anniversary party(第一道树形dp)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- 【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)
题干: Acesrc is a famous tourist at Nanjing University second to none. During this summer holiday, he, ...
- *【HDU - 6201】transaction transaction transaction(树形dp 或 spfa最长路 或 网络流)
题干: 题目大意: 给出一棵n个顶点的树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过所需要的花费.现在需要你在树上选择两个点,一个作为买入商品的点,一个作为卖出商品 ...
- HDU 1011 Starship Troopers星河战队(树形dp)
题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1. 每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子. 现 ...
- P4383-[八省联考2018]林克卡特树【wqs二分,树形dp】
正题 题目链接:https://www.luogu.com.cn/problem/P4383 题目大意 nnn个点的一棵树,要求删除kkk条边然后接上kkk条边权为000的边后形成的树上选择一对(p, ...
- HDU 6035 Colorful Tree(补集思想+树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6035 [题目大意] 给出一颗树,一条路径的价值为其上点权的种类数,求路径总价值 [题解] 单独考虑 ...
最新文章
- Java 程序员如何使用 Shiro 框架
- 可降阶的高阶微分方程
- Linux 调度器内幕
- 研发协同平台持续交付2.0架构演进
- oracle软件静默安装程序,【oracle】静默安装 oracle 11gr2
- Python中的Number(数字)
- knime二次开发节点的项目结构
- Flutter基础—布局模型之层叠定位
- 使用 leastsq 对指定函数格式进行最小二乘拟合
- 微信小程序中-[渲染层网络层错误] pages/card/card.wxss 中的本地资源图片无法通过 WXSS 获取-解决办法
- 如何用Python实现电影售票系统
- 【叨、校长】一个基于Extjs、Pushlet美轮美奂的Web聊天室
- 使用c语言实现端口全扫描程序,C语言实现TCP多线程端口扫描
- 使用搜狐Sendcloud的Webapi发送邮件:Jodd和Apache Httpclient
- hulu dpp_什么是直播电视的Hulu,它可以代替您的有线电视订阅吗?
- SDK之aar封装总结
- 腾讯秀丽江山之长歌行服务器维护,《长歌行》8月28日合服公告
- 百分百背后是百度电商的悲哀
- 关于HyperLPR车牌检测使用笔迹
- IntelXeon Gold 6240和IntelXeon Gold 5218有什么区别? 服务器CPU选型
热门文章
- android studio button位置_免费的Android开发环境
- 这才是真正的蛙泳,还挺能蹦跶......
- 计算机广告制作未来发展还行吗,计算机多媒体设计专业和广告设计制作那个好...
- 怎样让电脑速度变快_硬盘在电脑中起什么作用?
- php实现电脑自动关机,用批处理实现电脑自动关机
- mysql数据库的安装和配置文件_MySQL 数据库安装与配置详解
- oracle dbf文件设置,oracle移动数据dbf文件
- java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...
- linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...
- 算法——常用的数据结构/模板/基础知识