METO CODE 223 拉力赛
继续水板子题...
#include <bits/stdc++.h>
#define ll long long
using namespace std; inline int read() {
int x = , f = ; char ch = getchar();
while (ch < '' || ch > '') { if (ch == '-') f = -; ch = getchar(); }
while (ch >= '' && ch <= '') { x = x * + ch - ''; ch = getchar(); }
return x * f;
} const int maxn = 5e5 + ; struct Edge { int to, next, c; } edge[maxn];
int cnt, head[maxn];
struct Qedge { int to, next; } qedge[maxn];
int qcnt, qhead[maxn], n, m;
int lca[maxn];
ll dep[maxn];
int par[maxn];
int temp[maxn];
bool vis[maxn];
inline void addedge(int u, int v, int c) {
edge[++cnt].to = v;
edge[cnt].c = c;
edge[cnt].next = head[u];
head[u] = cnt;
}
inline void addqedge(int u, int v) {
qedge[++qcnt].to = v;
qedge[qcnt].next = qhead[u];
qhead[u] = qcnt;
}
int getfa(int x) { return x == par[x] ? x : par[x] = getfa(par[x]); } void dfs(int u) {
par[u] = u;
vis[u] = ;
for (int i = head[u]; i; i = edge[i].next) {
int v = edge[i].to;
if (!vis[v]) {
dep[v] = dep[u] + edge[i].c;
dfs(v);
par[v] = u;
}
}
for (int i = qhead[u]; i; i = qedge[i].next) {
int v = qedge[i].to;
if (vis[v]) {
lca[i] = getfa(v);
if (i % ) lca[i + ] = lca[i];
else lca[i-] = lca[i];
}
}
} int main() {
n = read(), m = read();
for (int i = ; i < n - ; i++) {
int u = read(), v =read(), c = read();
addedge(u, v, c);
addedge(v, u, c);
}
for (int i = ; i <= m; i++) {
int u = read(), v = read();
addqedge(u, v), addqedge(v, u);
}
dfs();
ll ans = ;
int cnt = ;
for (int i = ; i <= m; i++) {
if (lca[ * i] == qedge[ * i].to) {
cnt++;
ans += dep[qedge[*i].to] + dep[qedge[*i-].to] - * dep[lca[*i]];
}
}
printf("%d\n%lld\n", cnt, ans);
return ;
}
METO CODE 223 拉力赛的更多相关文章
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- lca(最近公共祖先(离线))
转自大佬博客 : https://www.cnblogs.com/JVxie/p/4854719.html LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先 ...
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现——转载自Vendetta Blogs
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现
首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵 ...
- 【模板】Tarjian求LCA
概念 公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点 举个例子吧,如下图所示4和5的最近公共祖先是2,5和3的最近公共祖先是1,2和1的最近公共祖先是1. 算法 常用的求LCA的算法有:Ta ...
- 算法笔记--lca倍增算法
算法笔记 模板: vector<int>g[N]; vector<int>edge[N]; ][N]; int deep[N]; int h[N]; void dfs(int ...
- [vijos1460&Metocode P223]拉力赛<LCA>
题目链接:https://vijos.org/p/1460 http://oj.fjaxyz.com:3389/problem.php?id=223 我不禁开始怀疑,这,真的是最近公共祖先的题吗,我是 ...
- ASCII 码对应表
Macron symbol ASCII CODE 238 : HTML entity : [ Home ][ español ] What is my IP address ? your public ...
- SAP问题【转载】
1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是"3000 的公司代码分录不完全-参见长文本" 希望各位大侠帮我看看. 3000 的公司代码分录不完全-参见 ...
随机推荐
- pytorch深度学习60分钟闪电战
https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html 官方推荐的一篇教程 Tensors #Construct a ...
- 为什么单线程的Redis这么快?
一. Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(li ...
- 【MySQL】MySQL的执行计划及索引优化
我们知道一般图书馆都会建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的. ...
- SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现 笔者所在的项目上的公司间STO的流程里,发货公司在做PGI之后系统自动触发收货公司的内向交货单.这个功能是通过交货单的Outp ...
- Fragment与Fragment相互切换之间的生命周期方法
Fragment 1 切换到 Fragment 2时生命周期变化 1.通过 add hide show 方式来切换 Fragment Fragment1 的生命周期变化为:onCreate().onC ...
- 谈谈git以及如何关联github
git :一款免费.开源的分布式代码版本管理控制系统 记录当前产品代码的所有版本信息,包括历史修改信息 方便快速回退到某一个具体的版本 方便团队协作开发 可检测代码冲突.合并代码等 1.利用 git ...
- 【视频】设计模式(C++)视频讲解
设计模式(C++) 视频网址: http://www.qghkt.com/ 设计模式(C++)视频地址: https://ke.qq.com/course/318637?tuin=a508ea62 目 ...
- SqlServer如何给表添加新的字段以及字段注释
语法: USE 数据库名ALTER TABLE 表名 ADD 字段名 类型 默认值 是否为空;EXEC sp_addextendedproperty N'MS_Description', N'注 ...
- js操作文章、字符串换行
操作前: 操作后: 第一步: 把中英文的逗号和顿号置换为 '\n’ support_unit = support_unit.replace(/,|,|./g, '\n') 第二步: //为了使\n ...
- centos6+ 安装python3.6以及pip3
https://blog.csdn.net/weixin_42350212/article/details/83008248