CodeForces 101D Castle (贪心)
来源:互联网 发布:java 数组长度动态 编辑:程序博客网 时间:2024/05/16 23:51
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>using namespace std;#define N 400020#define M 200020int fst[N], nxt[M], vv[M], cost[M], e;void init() {memset(fst, -1, sizeof fst);e = 0;}void add(int u, int v, int c) {vv[e] = v, cost[e] = c, nxt[e] = fst[u], fst[u] = e++;}int n, w[N], sz[N];int val[N];vector<int> son[N];double ans;void dfs(int u, int p) {sz[u] = 1;w[u] = 0;for(int i = fst[u]; ~i; i = nxt[i]) {int v = vv[i];int c = cost[i];if(v == p) continue;dfs(v, u);son[u].push_back(v);sz[u] += sz[v];val[v] = c;w[v] += c;w[u] += w[v];}}bool cmp(int i, int j) {return 1LL * w[i] * sz[j] < 1LL * w[j] * sz[i];}void dfs2(int u, int p) {int cnt = 0;for(int i = 0; i < son[u].size(); ++i) {int v = son[u][i];cnt += sz[v];ans += sz[v] * val[v];ans += 1LL * (sz[u] - cnt - 1) * w[v] * 2;dfs2(v, u);}}int main() {scanf("%d", &n);init();for(int i = 1; i < n; ++i) {int u, v, c;scanf("%d%d%d", &u, &v, &c);add(u, v, c);add(v, u, c);}dfs(1, -1);for(int i = 1; i <= n; ++i) {sort(son[i].begin(), son[i].end(), cmp);}dfs2(1, -1);printf("%.12lf\n", ans / (n - 1));return 0;}
0 0
- CodeForces 101D Castle (贪心)
- CodeForces 101D Castle(树形dp)
- CF 101D Castle
- CodeForces 545D贪心
- codeforces 276D 贪心
- CodeForces-748D 贪心
- Codeforces 758D 贪心
- Codeforces 767D 贪心
- Codeforces 853D 贪心
- CodeForces 825D(贪心)
- codeforces 116D Lawnmowe 贪心
- Codeforces 534D Handshakes(贪心)
- Codeforces 609D 贪心+二分
- CodeForces 623D Birthday (贪心)
- 【Codeforces 534D】【贪心】Handshakes
- codeforces 732D (二分 贪心)
- 【codeforces 732D】【二分+贪心】
- Codeforces #732D 二分 贪心
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
- Restful 设计规范学习个人总结
- Error retrieving parent for item: No resource found that
- Android 开源项目分类汇总
- C/C++基本数据类型长度
- CodeForces 101D Castle (贪心)
- android surfaceView+mediaPlayer 自定义视频播放器
- Android图像开源视图:SmartImageView
- #!/bin/bash和#!/bin/sh的区别
- 如何利用记事本编写并运行一个java程序
- WebSocket握手总结- CHROME与safari区别
- iOS当前日期n天后的date
- Android canvas.drawArc() 画圆弧
- Android中使用FragmentManager获得控件