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是几乎最有效的解 ...
随机推荐
- 开发者眼中的Spring与JavaEE
JavaEE与Spring 在Java社区中,Spring与Java EE之争是个永恒的话题.在这场争论中,来自两个阵营的布道师.架构师 与铁杆粉丝都在不遗余力地捍卫着本方的尊严,并试图说服对方加入到 ...
- Linux安装Nignx基于域名的多虚拟主机实战
看这个文章之前,要保证你的Nginx已经安装成功! 如果没有,请移步到下面这个文章,看完后再回来看! https://www.cnblogs.com/apollo1616/p/10214531.htm ...
- 第一个Spring Boot程序启动报错了(番外篇)
Spring Boot内嵌了一个容器,我可以不用吗?我能不能用外部的容器呢? 当然是可以的! 然后,下面代码在pom文件中一定要有哦! <dependency> <groupId&g ...
- 基本操作——word中怎样同一页中放入多张图片
可能很多人在放图片时候,碰见这种情况,习惯性的把图片拖进word,发现不能在一页上很工整的排列.很多人包括我刚开始也纳闷,怎么不能一页中放入几张图片呢,缩放也不想.下面分享一个小技巧给有缘人 以我的w ...
- Python 面试题(上)
Python语言特性 1 Python的函数参数传递 看两个例子: a = 1 deffun(a): a = 2 fun(a) printa # 1 a = [] deffun(a): a.appen ...
- ARM汇编学习笔记
ARM RISC (Reduced Instruction Set Computers) X86 CISC (Complex Instruction Set Computers) ...
- python中的id
python对象都有三个特性分别是身份.类型.值,身份指该对象内存地址,内建函数id()可获得身份,类似于指针的地址,但不能控制这个值,类型决定对象可以保存什么类型的值,值是对象表示的数据项,pyth ...
- python详细目录
python第一篇 第二篇.初识列表字典元祖循环 第三篇.内置方法 第四篇.编码解码 列表.元祖 第五篇.数据类型 第六篇 函数 第七篇.函数二 第八篇.递归.装饰器 第九篇 正则表达式 第十篇.模块 ...
- JSP嵌入ueditor、umeditor富文本编辑器
一.下载: 1.什么是富文本编辑器?就是: 或者是这个: 其中第一个功能比较详尽,其主要用来编写文章,名字叫做udeitor. 第二个就相对精简,是第一个的MINI版,其主要用来编辑即时聊天或者发帖, ...
- EntityFramework 学习 一 Migration from Entity Framework 4.1/4.3 to Entity Framework 5.0/6.0
To migrate your existing Entity Framework 4.x project to Entity Framework 5.0 using VS2012, first ta ...