bzoj3743 Kamp】的更多相关文章

Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去. 请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家. Input 第一行两个数,n,K. 接下来n-1行,每行三个数,x,y,z表示x到y之间有一条需要花费z时间的边. 接下来K行,每行一个数,表示K个人的分布. Output 输出n个数…
[BZOJ3743][Coci2015]Kamp Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去. 请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家. Input 第一行两个数,n,K. 接下来n-1行,每行三个数,x,y,z表示x到y之间有一条需要花费z时间的边. 接下来K行,每行一…
3743: [Coci2015]Kamp Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 229[Submit][Status][Discuss] Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去. 请你回答,对于i=1~n,如果在第i个点举行聚会,司…
Online Judge:Bzoj3743 Label:换根Dp,维护最长/次长链 题目描述 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去. 请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家. 输入 第一行两个数,n,K. 接下来n-1行,每行三个数,x,y,z表示x到y之间有一条需要花费z时间的边. 接下…
首先树dp求出一个点的答案 然后再一遍dfs换根(是叫做换根吗.. 详见代码 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #define ll long long #define N 500005 #define M 1000006 using name…
d[x][0]表示x点向下走且回到x点的最少代价 d[x][1]表示x点向下走但不回到x点的最少代价 d[x][2]表示x点向下走的最长路 d[x][3]表示x点向下走的次长路 u[x][0]表示x点向上走且回到x点的最少代价 u[x][1]表示x点向上走但不回到x点的最少代价 一遍树形DP即可 ans[i]=min(d[i][0]+u[i][1],d[i][1]+u[i][0]) #include<cstdio> #define N 500010 typedef long long ll;…
传送门 这是一道很有意思的题. 我们把所有的关键点都提出来,当成一棵有边权的虚树. 然后发现虚树上除最后不回到虚根的那条路径外外每条边都会被走两遍. 显然要让答案最优,不走的路径应该在虚树的直径上,于是我们dfs出虚树的直径. 注意对于不在虚树上的节点花费还需要多加dis(i,虚树)∗2dis(i,虚树)*2dis(i,虚树)∗2. 代码: #include<bits/stdc++.h> #define N 500005 #define ll long long using namespace…
传送门 Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去. 请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家. Input 第一行两个数,n,K. 接下来n-1行,每行三个数,x,y,z表示x到y之间有一条需要花费z时间的边. 接下来K行,每行一个数,表示K个人的分布. Output 输…
设f[i]为由i开始遍历完子树内所要求的点的最短时间,g[i]为由i开始遍历完子树内所要求的点最后回到i的最短时间.则g[i]=Σ(g[j]+2),f[i]=min{g[i]-g[j]+f[j]-1}. 然后由父亲答案还原.因为上面的dp用到了max似乎不太好搞,于是记录一下最大值是用了哪棵子树以及次大值就行了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #…
kamp Description jz 市的云台山是个很美丽的景区,小 x 暑期到云台山打工,他的任务是开景区的大巴. 云台山景区有 N 个景点,这 N 个景点由 N-1 条道路连接而成,我们保证这 N 个景点之 间有且仅有一条路径相连,并且每条道路开车经过的时间不一定相同. 现在小 x 会提前知道有 K 个人要坐车,并且每个人都有一个景点作为目标景点,小 x 必须要把每个人送到他们要去的景点. 不过,小 x 可以指定这 K 个人去某个景点集合,这样他就从这个集合点出发,分别去 送这 K 个的人…