Codeforces 1281E
2024-10-21 06:09:56
题意:一棵$2n$个点的树让你分配$n$对居民在点上求每对居民之间路径和的最小值和最大值
思路:考虑一条边$(u, v)$
1.若要使答案尽可能大,那么这条边应该取到尽可能多次。显然,如果$u, v$的子树大小分别表示成$sz_u, sz_v$,那么这条边最多被覆盖$min(sz_u, sz_v)$次,算出每条边最多被取到的次数再乘以边长就是最大值了。
2.若要使答案尽可能小,那么我们应该让每条边最多取到$1$次,我们考虑$sz_u, sz_v$的奇偶性,发现他们是同奇偶性的。如果都是偶数,那么这条边就可以不取,因为两个子树可以内部完成,否则这条边必须取到,因为假设两个内部尽可能多的完成了,依旧会分别至少剩下$1$个点没分配,所以这条边必定被覆盖。
#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl using namespace std;
typedef long long ll; const int N = 2e5 + 5; int n, head[N], tot, sz[N]; ll mx, mn;
struct Enode {
int to, nxt, w;
} edge[N * 2]; void addedge(int u, int v, int w) {
edge[tot].to = v;
edge[tot].w = w;
edge[tot].nxt = head[u];
head[u] = tot++;
} void dfs(int u, int f) {
sz[u] = 1;
for(int i = head[u]; i != -1; i = edge[i].nxt) {
int v = edge[i].to, w = edge[i].w;
if(v == f) continue;
dfs(v, u);
if(sz[v] & 1) mn += w;
mx += (ll)w * min(sz[v], n - sz[v]);
sz[u] += sz[v];
}
} void solve() {
scanf("%d", &n);
for(int i = 1; i <= 2 * n; i++) head[i] = -1, sz[i] = 0; tot = mn = mx = 0;
n = 2 * n;
for(int i = 1, u, v, w; i < n; i++) {
scanf("%d%d%d", &u, &v, &w);
addedge(u, v, w);
addedge(v, u, w);
}
dfs(1, -1);
printf("%lld %lld\n", mn, mx);
} int main() {
int cs; for(scanf("%d", &cs); cs--; solve());
}
最新文章
- 分布式搜索引擎Elasticsearch性能优化与配置
- POJ3013 Big Christmas Tree(最短路径树)
- 使用max() 函数
- [LeetCode] Longest Palindromic Substring(manacher algorithm)
- Java_Spring MVC_Servlet
- 在scrollView中使用pageControl
- Merge Into example
- 教程-Win7极速优化20项
- c语言,strcspn,在串中查找第一个给定字符集内容的段
- uvalive3026 Period (KMP+结论)
- Java (六、String类和StringBuffer)
- 从零开始学习PYTHON3讲义(十)自己做一个“电子记事本”
- 项目管理——WBS工作分解法
- [C++ Primer Plus] 第10章、对象和类(一)程序清单——辨析三个const
- script nGrinder_TestRunnerInsertMysqlSingle.groovy
- nodejs 安装失败 ,出现error 2502 和error2503
- WPF打印涉及到的关键类
- Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小
- JAVA SpringBoot 项目打包(JAR),在打包成 docker 镜像的基本方法
- mac 10.12显示隐藏文件
热门文章
- [OpenCV实战]48 基于OpenCV实现图像质量评价
- iOS开发小结 - 通过PUT请求上传数据
- 笔记本USB接口案例_分析-笔记本USB接口案例_实现
- 【Oculus Interaction SDK】(六)实体按钮 &;&; 按压交互
- 【HMS Core】机器学习服务助力APP快速集成图像分割与上传功能
- DownKyi安装使用教程
- 关于异常处理的return
- catkin_make设置编译并行数
- Vim-Adventures 有趣的Vim小游戏
- SpringMVC的类型转换器与RESTFUL集成