UVALive 5061 Lightning Energy Report --LCA
题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0)
解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k),再在LCA的父亲(如果有的话)减k,免除对上面的影响。最后dfs一遍,ans[u] += ans[v] (v是u的所有儿子)即可。
这里LCA用RMQ求的。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define N 100107 int fa[N],ans[N];
vector<int> G[N];
int ati[N],f[N],bn,b[N],dp[N][],ind; void dfs(int u,int fa) {
for(int i=;i<G[u].size();i++) {
int v = G[u][i];
if(v == fa) continue;
dfs(v,u);
ans[u] += ans[v];
}
} void init()
{
memset(ati,,sizeof(ati));
memset(f,,sizeof(f));
memset(b,,sizeof(b));
memset(dp,,sizeof(dp));
bn = ind = ;
} void dfs_2(int u,int father)
{
int tmp = ++ind;
f[tmp] = u;
b[++bn] = tmp;
ati[u] = bn;
for(int i=;i<G[u].size();i++)
{
int v = G[u][i];
if(v == father) continue;
fa[v] = u;
dfs_2(v,u);
b[++bn]=tmp;
}
} void RMQ_init(int n)
{
for (int i=; i<=n; i++) dp[i][]=b[i];
int m=floor(log((double)n*1.0)/log((double)2.0));
for (int j=; j<=m; j++)
for (int i=; i<=n-(<<j)+; i++)
dp[i][j]=min(dp[i][j-],dp[i+(<<(j-))][j-]);
} int RMQ(int l,int r)
{
int k=floor(log((double)r-l+)/log(2.0));
return min(dp[l][k],dp[r-(<<k)+][k]);
} int LCA(int a,int b)
{
if (ati[a] > ati[b]) swap(a,b);
return f[RMQ(ati[a],ati[b])];
} int main()
{
int t,cs = ,i,n,m,u,v,k;
scanf("%d",&t);
while(t--)
{
init();
memset(G,,sizeof(G));
memset(ans,,sizeof(ans));
scanf("%d",&n);
for(i=;i<n-;i++) {
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs_2(,-);
RMQ_init(bn);
scanf("%d",&m);
while(m--) {
scanf("%d%d%d",&u,&v,&k);
int lca = LCA(u,v);
ans[u] += k, ans[v] += k;
ans[lca] -= k;
if(lca != ) ans[fa[lca]] -= k;
}
dfs(,-);
printf("Case #%d:\n",cs++);
for(i=;i<n;i++) printf("%d\n",ans[i]);
}
return ;
}
UVALive 5061 Lightning Energy Report --LCA的更多相关文章
- UVALive - 4960 Sensor network(生成树+LCA)
题目大意:给出N个点.M条边.问这N个点形成的生成树的最大权值边-最小权值边的最小值 解题思路:先排序,然后按生成树的kruscal算法进行加边,再维护一个最小权值边 加边的时候要考虑一下加下去的边是 ...
- EPANET头文件解读系列9——VARS.H
/************************************************************************* Global Variabl ...
- EPANET头文件解读系列1——TEXT.H
定义在TEXT.H文件中的字符常量都以小写开头,然后紧跟一个下划线,再接着就全是大写字母 /***************************************************** ...
- Salesforce学习之路-developer篇(四)Visualforce结合Reports展示图表
Salesforce作为一款CRM系统,个人觉得最重要的环境便是在于数据的展示和联动,而Salesforce也本身提供了相当强大的功能,Report在展示图表的方面十分强大,前段时间更是宣布以157亿 ...
- Salesforce学习之路(七)Visualforce结合Reports展示图表
Salesforce作为一款CRM系统,个人觉得最重要的环境便是在于数据的展示和联动,而Salesforce也本身提供了相当强大的功能,Report在展示图表的方面十分强大,前段时间更是宣布以157亿 ...
- POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA)
POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA) Description A ...
- LA 5061 LCA tarjan 算法
题目大意: 给定所有点的权值都为0,给定一棵树以后,每次询问都要求给定两点 x , y 和一个权值w,要求x,y路径上所有点权值加上w,最后求出每一个节点的值 这里因为查询和点都特别多,所以希望能最后 ...
- UVALive - 6712 lca+dfs序线段树
题意:一棵树q次查询,每次查询给三个不同的点,要求计算到这三个点的比其他两个距离都要小的点数 题解:很明显的lca,倍增的找中点,关键是两个点的中点很好找,但是三个点不好找,我刚开始还准备分类讨论,后 ...
- UVALive - 7831 :ACM Tax (主席树求树路径上中位数:LCA+主席树)
题意:给定一棵带权树,Q次询问,每次询问路径上的中位数. 思路:中位数分边数奇偶考虑,当当边数为num=奇时,结果就算路径第num/2+1大,用主席树做即可... (做了几道比较难的主席树,都wa了. ...
随机推荐
- angularjs封装bootstrap官网的时间插件datetimepicker
背景:angular与jquery类库的协作 第三方类库中,不得不提的是大名鼎鼎的jquery,现在基本上已经是国内web开发的必修工具了.它灵活的dom操作,让很多web开发人员欲罢不能.再加上已经 ...
- 关于window.onload
window.onload是当文档加载完成后执行. <script>之间的代码会在代码加载到此处执行.function内的代码是调用时才执行. 但window.onload有个坏处,它非要 ...
- Hexo部署到GitHub出现spawn ENOENT的解决办法
最近用Hexo博客部署到GitHub时出现了这如下的错误: Error: spawn ENOENT at errnoException (child_process.js:980:11) at Pro ...
- [GitHub] GitHub Repositories
https://github.com/karqical2016/karqical2016.github.io.git https://github.com/karqical2016/java.git ...
- DevExpress更新至13.1.7
DevExpress下的.NET界面组件 DXperience Universal Suite 最新发布13.1.7版,多个属性的定义方式发生变化,另外还有大量的bug修复.使用DevExpress朋 ...
- Merry Christmas & Happy New Year!!
圣诞快乐,新年快乐!
- Jquery plupload上传笔记(修改版)
找一个好的上传插件不容易啊,最近看好一个上传插件,查了些网上质料,自己做了些改动,记录下来,来彰显自己曾经屌丝过,这插件还不错,支持多个上传和预览 首先引用,发现有的时候想学点新的东西,不过时间久了也 ...
- CoreLocation 定位
前言: 本章会使用OC和Swift分别进行实现,需要了解Swift的小伙伴可以翻一下之前的博文 LBS和SoloMo(索罗门) LBS:基于位置的服务,根据定位展示周边美食.景点等信息(全称:Loca ...
- 在线研讨会webinars
我是怎么一步一步找到这里的? jedox-jedox Webinars (不懂意思)--->google [ webinars open source ],->htt ...
- 使用iText库创建PDF文件
前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...