The 2018 ACM-ICPC CCPC NING XIA G-Factories
题意:在一棵数的叶子上建k个工厂保证,求两两距离之和的最小值。
思路:如果一个一个叶子节点去考虑去与否太麻烦了,直接考虑该节点的子树上选取几个作为工厂,利用树形DP,dp[u][i]表示的是u节点为根的子树选取了i个叶子作为工厂的最小值。
转移方程:dp[u][i]=min(dp[u][i],dp[u][i-k]+dp[v][k]+w*k*(m-k)),v表示u的子节点,k表示在u的子节点子树上选取个数,w*k*(m-k)表示这条边的贡献。
AC代码:
1 int n,m,cas;
2 ll dp[maxn][102];
3 int siz[maxn];
4 struct node{
5 int u;
6 ll w;
7 node(int _u,ll _w){
8 u=_u;
9 w=_w;
10 }
11 };
12 vector<node>a[maxn];
13 void dfs(int u,int fa){
14 if(a[u].size()==1){
15 dp[u][1]=0;
16 siz[u]=1;
17 }
18 dp[u][0]=0;
19 rep(i,0,a[u].size()-1){
20 int v=a[u][i].u;
21 ll w=a[u][i].w;
22 if(v==fa) continue;
23 dfs(v,u);
24 siz[u]+=siz[v];
25 dp[u][m]=min(dp[u][m],dp[v][m]);
26 for(int j=min(m,siz[u]);j>=1;j--){
27 for(int k=1;k<=min(j,siz[v]);k++){
28 dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]+1ll*w*k*1ll*(m-k));
29 }
30 }
31 }
32 }
33 void init(){
34 rep(i,0,n) a[i].clear();
35 mem(siz,0);
36 // mem(dp,INF);
37 rep(i,1,n) rep(j,1,m) dp[i][j]=INF;
38 }
39 void run(){
40 n=rd(),m=rd();
41 init();
42 rep(i,1,n-1){
43 int u=rd(),v=rd();
44 ll w=rdll();
45 a[u].push_back(node(v,w));
46 a[v].push_back(node(u,w));
47 }
48 int rt=1;
49 rep(i,0,n){
50 if(a[i].size()>1){
51 rt=i;
52 break;
53 }
54 }
55 rep(i,0,n) dp[i][0]=0;
56 dfs(rt,-1);
57 printf("Case #%d: %lld\n",++cas,dp[rt][m]);
58 }
59 signed main()
60 {
61 int t=rd();
62 while(t--){
63 run();
64 }
65 // run();
66 return 0;
67 }
The 2018 ACM-ICPC CCPC NING XIA G-Factories的更多相关文章
- 有关信息ACM/ICPC竞争环境GCC/G++叠插件研究记录的扩展
0.起因 有时.DFS总是比BFS受人喜爱--毕竟DFS简单粗暴,更,而有些东西BFS不要启动,DFS它似乎是一个可行的选择-- 但是有一个问题,DFS默认直接写入到系统堆栈.系统堆栈和足够浅,此时O ...
- 2018 ACM ICPC 南京赛区 酱油记
Day 1: 早上6点起床打车去车站,似乎好久没有这么早起床过了,困到不行,在火车上睡啊睡就睡到了南京.南航离南京南站很近,地铁一站就到了,在学校里看到了体验坐直升机的活动,感觉很强.报道完之后去吃了 ...
- 2018 ACM/ICPC 南京 I题 Magic Potion
题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...
- 2019 ACM/ICPC North America Qualifier G.Research Productivity Index(概率期望dp)
https://open.kattis.com/problems/researchproductivityindex 这道题是考场上没写出来的一道题,今年看看感觉简单到不像话,当时自己对于dp没有什么 ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering
Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...
- ACM ICPC China final G Pandaria
目录 ACM ICPC China final G Pandaria ACM ICPC China final G Pandaria 题意:给一张\(n\)个点\(m\)条边的无向图,\(c[i]\) ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time
Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...
- hduoj 4706 Children's Day 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4706 Children's Day Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- C# 类 (10) - 命名空间NameSpace
NameSpace 命名空间是一系列 类型的集合,比如很多方法,很多类,集合在一个空间(myspace)里,谁想用就先 using myspace,然后直接用不using myspace的话,想用里面 ...
- Springboot 基本认识
不管是 spring cloud alibaba 还是 spring cloud netflix,都 是基于 springboot 这个微框架来构建的,所以我希望花一 点时间来讲一下 springbo ...
- 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解
题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成 ...
- 第一个SpringMVC项目——HelloMVC
第一步:启动IDEA新建一个无模板的Maven项目,注意这还不是一个web项目,想成为web项目,需要添加web框架,这就是第二步需要做的事情 第二步:添加web框架支持 单击之后会弹出这个界面 第三 ...
- vue 如何重绘父组件,当子组件的宽度变化时候
vue 如何重绘父组件,当子组件的宽度变化时候 vue & dynamic el-popover position demo https://codepen.io/xgqfrms/pen/wv ...
- 微信小程序-显示外链图片 bug
微信小程序-显示外链图片 bug 显示外链图片 bug 403 bug 禁止外链,未授权 https://httpstatuses.com/403 image component 图片.支持 JPG. ...
- Jenkins Ansible GitLab 自动化部署
Jenkins Ansible GitLab 自动化部署 DevOps https://www.cnblogs.com/yangjianbo/articles/10393765.html https: ...
- post upload file & application/x-www-form-urlencoded & multipart/form-data
post upload file application/x-www-form-urlencoded & multipart/form-data https://stackoverflow.c ...
- Flutter 设置input边框
example 1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp ext ...
- 《容器高手实战: Dockerfile最佳实践》
Dockerfile最佳实践一个容器对应一个进程一个Docker容器应该只对应一个进程,也就是一个Docker 镜像一般只包含一个应用的制品包(比如.jar). 在需要组合多个进程的场景,使用容器组( ...