HDOJ5044(最近公共祖先)
#include<cstdio>
#include<cstring>
using namespace std;
const int MAX_N=;
struct Edge{
int v,id,next;
}edge[MAX_N*];
int a[MAX_N],b[MAX_N],to[MAX_N],k[MAX_N],lca[MAX_N];
int head[MAX_N],opr[MAX_N],fa[MAX_N],father[MAX_N];
int cnt;
long long valnode[MAX_N],valedge[MAX_N];
bool type[MAX_N],vis[MAX_N];
void init()
{
memset(valnode,,sizeof(valnode));
memset(valedge,,sizeof(valedge));
memset(opr,-,sizeof(opr));
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
cnt=;
}
int findfa(int a)
{
return father[a]==a?a:findfa(father[a]);
}
void addedge(int u,int v, int id)
{
edge[cnt].v=v;
edge[cnt].next=head[u];
edge[cnt].id=id;
head[u]=cnt++;
}
void addopr(int u,int v, int id)
{
edge[cnt].v=v;
edge[cnt].next=opr[u];
edge[cnt].id=id;
opr[u]=cnt++;
}
void LCA(int now, int f)
{
father[now]=now;
fa[now]=f;
vis[now]=true;
for(int i=opr[now];i!=-;i=edge[i].next)
{
int v=edge[i].v;
int id=edge[i].id;
if(vis[v])
lca[id]=findfa(v);
}
for(int i=head[now];i!=-;i=edge[i].next)
{
int v=edge[i].v;
int id=edge[i].id;
if(v==f)
continue;
LCA(v,now);
to[id]=v;
father[v]=now;
}
}
void getans(int now, int fa)
{
for(int i=head[now];i!=-;i=edge[i].next)
{
int v=edge[i].v;
int id=edge[i].id;
if(v==fa)
continue;
getans(v,now);
valnode[now]+=valnode[v];
valedge[now]+=valedge[v];
}
}
int main()
{
int n,m,t;
scanf("%d",&t);
int l=;
while(l<t)
{
init();
scanf("%d %d",&n,&m);
for(int i=;i<n-;i++)
{
int u,v;
scanf("%d %d",&u,&v);
addedge(u,v,i);
addedge(v,u,i);
}
for(int i=;i<m;i++)
{
char str[];
scanf("%s",str);
scanf("%d %d %d",&a[i],&b[i],&k[i]);
type[i]=str[]=='';
addopr(a[i],b[i],i);
addopr(b[i],a[i],i);
}
LCA(,-);
fa[]=;
for(int i=;i<m;i++)
{
if(type[i])
{
valnode[a[i]]+=k[i];
valnode[b[i]]+=k[i];
valnode[lca[i]]-=k[i];
valnode[fa[lca[i]]]-=k[i];
}
else
{
valedge[a[i]]+=k[i];
valedge[b[i]]+=k[i];
valedge[lca[i]]-=k[i]*;
}
}
getans(,-);
printf("Case #%d:\n",++l);
for(int i=;i<=n;i++)
{
if(i!=)
putchar(' ');
printf("%I64d",valnode[i]);
}
putchar('\n');
for(int i=;i<n-;i++)
{
if(i)
putchar(' ');
printf("%I64d",valedge[to[i]]);
}
puts("");
}
return ;
}
HDOJ5044(最近公共祖先)的更多相关文章
- LCA最近公共祖先 ST+RMQ在线算法
对于一类题目,是一棵树或者森林,有多次查询,求2点间的距离,可以用LCA来解决. 这一类的问题有2中解决方法.第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法.复杂度都是O( ...
- 【转】最近公共祖先(LCA)
基本概念 LCA:树上的最近公共祖先,对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. RMQ:区间最小值查询问题.对于长度为n的 ...
- 【并查集】【树】最近公共祖先LCA-Tarjan算法
最近公共祖先LCA 双链BT 如果每个结点都有一个指针指向它的父结点,于是我们可以从任何一个结点出发,得到一个到达树根结点的单向链表.因此这个问题转换为两个单向链表的第一个公共结点(先分别遍历两个链表 ...
- 洛谷P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)【转】【修改】
一.基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成 ...
- 数据结构作业——sights(最短路/最近公共祖先)
sights Description 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点,由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小风姑娘不想走那么 ...
- [最近公共祖先] POJ 3728 The merchant
The merchant Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 4556 Accepted: 1576 Desc ...
- [最近公共祖先] POJ 1330 Nearest Common Ancestors
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27316 Accept ...
- 图论--最近公共祖先问题(LCA)模板
最近公共祖先问题(LCA)是求一颗树上的某两点距离他们最近的公共祖先节点,由于树的特性,树上两点之间路径是唯一的,所以对于很多处理关于树的路径问题的时候为了得知树两点的间的路径,LCA是几乎最有效的解 ...
随机推荐
- 关于中国省市的一份js代码
下面是一份关于中国省市的js代码,搜藏起来,非常有用. var arrCity = [ { name:"请选择", sub:[{name:"请选择"}], ty ...
- (转)Javascript模块化编程(二):AMD规范
这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...
- ceph基本架构简述
1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...
- 前端基础-CSS属性操作
前端基础-CSS属性操作 css text 文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB( ...
- ps 切片 蓝色 灰色 小标志 什么意思
切片颜色 区分自动切片与用户切片和基于图层的切片.默认情况下,用户切片和基于图层的切片带蓝色标记,而自动切片带灰色标记.-----用户切片就是你需要的切片,其他区域会形成自动切片,可以视为自己不要的, ...
- Spark操作算子本质-RDD的容错
Spark操作算子本质-RDD的容错spark模式1.standalone master 资源调度 worker2.yarn resourcemanager 资源调度 nodemanager在一个集群 ...
- Hadoop- HDFS的API操作
1.引入依赖 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...
- HIVE- 大数据运维之hive管理
我现在在一家公司负责大数据平台(CDH平台)的运维管理,最常遇见的问题我总结出来,并且继续在下面更新.希望方便自己以后trouble shooting以及方便各位同行解决问题与学习. 关于做运维有几个 ...
- 京东自营,你TM太坑了。
双12来了,京东自营好坑.昨天(12月6日)看的一条秋裤,89元,今天准备买,居然涨到了119,他大爷的. 京东你大爷的.
- delphi数据库的备份及还原
实例应用1: //备份procedure TF_DataBaseBackUp.Btn_bfClick(Sender: TObject); var i:integer; begin if SaveDia ...