hiho一下 第112周 Total Highway Distance (树的所有路径)
来源:互联网 发布:nginx 403 forbidden 编辑:程序博客网 时间:2024/05/03 19:40
分析:
很套路的一个树的题,经过一条边的所有路径的数目。
遍历以每个节点为根节点的子树的节点的个数即可求出路径数。
对树进行dfs,要记录父亲节点,防止方向边出现。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;#define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x << endl;typedef long long ll;struct jibancanyang{ int n, m; vector<pair<int, int> > G[112345]; int node[112345]; ll ans = 0; void dfs(int cur, int far) { node[cur] = 1; for (int i = 0; i < int(G[cur].size()); ++i) { pair<int, int> nxt = G[cur][i]; if (G[cur][i].first == far) continue; dfs(nxt.first, cur); node[cur] += node[nxt.first]; } for (int i = 0; i < int(G[cur].size()); ++i) { if (G[cur][i].first == far) continue; int x = node[G[cur][i].first]; ans += ll(n - x) * x * G[cur][i].second; } } void fun() { scanf("%d%d", &n, &m); for (int i = 0; i < n - 1; ++i) { int x, y, t; scanf("%d%d%d", &x, &y, &t); G[x].push_back(pair<int, int>(y, t)); G[y].push_back(pair<int, int>(x, t)); } dfs(1, -1); while (m--) { char op[10]; scanf("%s", op); if (op[0] == 'Q') { printf("%lld\n", ans); } else { int x, u, v, add, pre = 0; scanf("%d%d%d", &u, &v, &add); if (node[u] < node[v]) { x = node[u]; } else { x = node[v]; swap(u, v); } for (int i = 0; i < int(G[u].size()); ++i) { if (G[u][i].first == v) { pre = G[u][i].second; G[u][i].second = add; break; } } ans -= ll(n - x) * x * pre; ans += ll(n - x) * x * add; } } }}ac;int main(){#ifdef LOCAL freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout);#endif ac.fun(); return 0;}
0 0
- hiho一下 第112周 Total Highway Distance (树的所有路径)
- HiHo 112 Total Highway Distance
- hiho Total Highway Distance
- Total Highway Distance(贪心)
- hihocoder 1238 Total Highway Distance
- hihoCoder 1238 Total Highway Distance
- hiho一下第65周微软面试题《Highway》题目分析
- [微软]题目2 : Total Highway Distance
- Trie树 hiho一下第2周
- hiho一下 第143周 hiho密码
- hiho一下 第141周
- hiho一下 第139周
- hiho一下第143周
- hiho一下 第145周
- hiho一下 第167周
- hiho一下 第175周
- hiho一下 第174周
- hiho一下 第五十周(欧拉路径)50
- JavaEE——Java和DOS下收发邮件(SMTP和POP3协议)、E-Mail协议)
- codeforces 707 B. Bakery【图论】
- strcat和strncat函数的实现
- cuda学习笔记对应例子
- codeforces 707 C Pythagorean Triples【数学】
- hiho一下 第112周 Total Highway Distance (树的所有路径)
- 勾股定理(Pythagorean Triples,cf 707C)
- 插件开发之360 DroidPlugin源码分析(五)Service预注册占坑
- 创建型模式之——外观模式
- 麥田解馬人CROPCIRCLES甲骨學: 美麗自父
- 斐波那契数列的相关
- Perl语法速查
- [leetcode] 380. Insert Delete GetRandom O(1) 解题报告
- Android三级联动示例