比赛时候写复杂了……

我写的是 计算每个节点树内所有点到某个点的距离和。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 50;
vector<int> g[maxn];
int son[maxn];
ll d[maxn]; ///树内所有点到某个点的距离和
int odd[maxn];
int even[maxn];
void dfs1(int u, int fa)
{d[u] = 0;son[u] = 0;son[u]++;even[u] = 1;for(int i = 0; i < (int)g[u].size(); i++){int v = g[u][i];if(v == fa) continue;dfs1(v, u);son[u] += son[v];even[u] += odd[v];d[u] += d[v] + son[v];}odd[u] = son[u] - even[u];// printf("%d %I64d\n", u, d[u]);
}
ll ans = 0;
void dfs2(int u, int fa)
{for(int i = 0; i < (int)g[u].size(); i++){int v = g[u][i];if(v == fa) continue;d[v] = d[v] + (d[u] - d[v] - (ll)son[v]) + (ll)(son[u] - son[v]);odd[v] += (son[u] - son[v] - odd[u] + even[v]);son[v] = son[u];ans += ((d[v] + odd[v]) / 2LL);dfs2(v, u);}
}
int main()
{int n; scanf("%d", &n);for(int i = 1; i <= n - 1; i++){int u, v; scanf("%d %d", &u, &v);g[u].push_back(v);g[v].push_back(u);}dfs1(1, 0);dfs2(1, 0);ans += (d[1] + odd[1]) / 2LL;printf("%lld\n", ans / 2LL);return 0;
}

Code

实际上这题只需要计算树上任意两点的距离和,枚举每条边的贡献就行了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 50;
vector<int> g[maxn];
int n;
ll ans, odd, even;
int dfs(int u, int fa, int dep)
{if(dep % 2) odd++;else even++;int son = 1; ///统计子树大小for(int i = 0; i < (int)g[u].size(); i++){int v = g[u][i];if(v == fa) continue;int sing = dfs(v, u, dep + 1);ans += (ll)sing * (n - sing); ///枚举每条边的贡献son += sing;}return son;
}
int main()
{scanf("%d", &n);for(int i = 1; i <= n - 1; i++){int u, v; scanf("%d %d", &u, &v);g[u].push_back(v);g[v].push_back(u);}dfs(1, 0, 0);ans = (ans + (ll)odd * even) / 2;printf("%lld\n", ans);return 0;
}

Code

转载于:https://www.cnblogs.com/wangwangyu/p/9744256.html

E. Sergey and Subway相关推荐

  1. CF1060E Sergey and Subway

    CF1060E Sergey and Subway 树上计数dp,考虑每条边的贡献,树上两点距离用深度与LCA表示 长度为2的两点间可以连一条边,所以对于任意两点 i , j i,j i,j, d i ...

  2. E. Sergey and Subway(思维 + dp)

    Problem - E - Codeforces Sergey Semyonovich 是 N 市县的市长,他一直在思考如何进一步改善 Nkers 的生活.不幸的是,几乎所有可以做的事情都已经完成了, ...

  3. 2018.10.04 codeforces1060E. Sergey and Subway(树形dp)

    传送门 一开始把题意读错了. 我们dfs时对于边(p,fa)(p,fa)(p,fa),计算出以ppp为根的子树对子树外连通块的贡献,然后加上漏加的贡献. 这样算出来是答案的两倍. 因为相当于dis(u ...

  4. 杂题记录及简要题解(一)

    一些前几天做过的还不错的但是不是太想专门花一整篇博客的篇幅去写的题就简要地记录在这里. 说是简要题解,其实写得还是挺详细的.之后的杂题记录可能就会写得简略一点. CF1060E Sergey and ...

  5. 谢尔盖.布林的早期思想_谷歌联合创始人谢尔盖·布林(Sergey Brin)谈人工智能与自动化...

    谢尔盖.布林的早期思想 Here are three links worth your time: 这是三个值得您花费时间的链接: Google cofounder Sergey Brin talks ...

  6. L - Subway POJ - 2502

    L - Subway POJ - 2502 题意: 从 家出发步行与坐 subway 交替进行,问最小的时间花费,最终四舍五入答案为 整数 存图难 四舍五入: double b int a = b + ...

  7. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  8. AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)

    AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...

  9. 结对项目——Subway

    博客链接: 结对项目-Subway 转载于:https://www.cnblogs.com/Dominic-Abraham/p/9117266.html

最新文章

  1. 为什么大家都不戳破深度学习的本质?!
  2. 基于HTML5 WebGL实现 json工控风机叶轮旋转
  3. 超详细windows安装mongo数据库、注册为服务并添加环境变量
  4. 论文笔记 Aggregated Residual Transformations for Deep Neural Networks
  5. git如何拉去开发的 最新代码_linux脚本拉取git代码并发布tomcat应用
  6. python100天从新手到大师 pdf_Python100天从新手到大师(Python100Days)
  7. 11尺寸长宽 iphone_东风日产奇骏垫底!盘点2020年11月销量最大的十款SUV
  8. 线性调频信号及仿真[python]
  9. vue 倒计时 插件_vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
  10. 1223 Dice Roll Simulation
  11. 活动分区恢复为不活动分区的步骤
  12. CentOS 7下限制ip访问
  13. Arcface中的IR_SE模块
  14. UOS将字体制作成软件包,可双击安装
  15. 计算机控制系统陈振答案,北京理工大学自动化学院导师教师师资介绍简介-董 宁...
  16. 280049_CAN 模块
  17. 蓝桥杯—切面条/大衍数列
  18. 京东要开实体店?且看他在线下如何被苏宁碾压
  19. 软考中级 真题 2018年上半年 信息系统管理工程师 基础知识
  20. 常用传感器讲解十一--light cup(KY-027)

热门文章

  1. switch 语句编译报错Constant expression required
  2. 将本地项目上传到gitLab操作
  3. RabbitMQ控制台队列标签的含义
  4. ubuntu16.04 安装搜狗输入法
  5. 基于JQuery做的一个简单的点击显示和隐藏的小Demo
  6. 递归算法,如何把list中父子类对象递归成树
  7. Yocto tips (17): Yocto License问题:restricted license not whitelisted in LICENSE_FLAGS_WHITELIST
  8. 深入浅出LVM on linux
  9. warning:1071 (42000) Specified key was too long;max key length is 1000 bytes
  10. 解决思维导图软件Mindmanager Mindjet连接出错