#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(最近公共祖先)的更多相关文章

  1. LCA最近公共祖先 ST+RMQ在线算法

    对于一类题目,是一棵树或者森林,有多次查询,求2点间的距离,可以用LCA来解决.     这一类的问题有2中解决方法.第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法.复杂度都是O( ...

  2. 【转】最近公共祖先(LCA)

    基本概念 LCA:树上的最近公共祖先,对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. RMQ:区间最小值查询问题.对于长度为n的 ...

  3. 【并查集】【树】最近公共祖先LCA-Tarjan算法

    最近公共祖先LCA 双链BT 如果每个结点都有一个指针指向它的父结点,于是我们可以从任何一个结点出发,得到一个到达树根结点的单向链表.因此这个问题转换为两个单向链表的第一个公共结点(先分别遍历两个链表 ...

  4. 洛谷P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...

  5. Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)【转】【修改】

    一.基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成 ...

  6. 数据结构作业——sights(最短路/最近公共祖先)

    sights Description 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点,由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小风姑娘不想走那么 ...

  7. [最近公共祖先] POJ 3728 The merchant

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4556   Accepted: 1576 Desc ...

  8. [最近公共祖先] POJ 1330 Nearest Common Ancestors

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27316   Accept ...

  9. 图论--最近公共祖先问题(LCA)模板

    最近公共祖先问题(LCA)是求一颗树上的某两点距离他们最近的公共祖先节点,由于树的特性,树上两点之间路径是唯一的,所以对于很多处理关于树的路径问题的时候为了得知树两点的间的路径,LCA是几乎最有效的解 ...

随机推荐

  1. Django 认证系统 cookie & session & auth模块

    概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...

  2. linux c编程:线程互斥一

    当多个线程共享相同的内存的时候,需要确保每个线程都看到一致的数据视图.如果每个线程使用的变量都是其他线程不会读取和修改的.那么就不存在一致性问题.同样,如果变量是只读的,多个线程也不会有一致性的问题. ...

  3. PHP的依赖管理工具----composer

    安装Composer 参考:https://getcomposer.org/doc/01-basic-usage.md composer 是PHP依赖管理工具 PHP最低版本要求5.3.2,需要允许o ...

  4. Spring注解式与配置文件式

    http://tom-seed.iteye.com/blog/1584632 Spring注解方式bean容器管理 1.通过在配置文件中配置spring组件注入 <context:compone ...

  5. linux 8 -- 管道组合Shell命令进行系统管理

    二十. 通过管道组合Shell命令获取系统运行数据: 1.  输出当前系统中占用内存最多的5条命令:     #1) 通过ps命令列出当前主机正在运行的所有进程.     #2) 按照第五个字段基于数 ...

  6. Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容

    此篇算是一个翻译,万一有国内同样的小白遇到同样问题,方便参考. 原文http://hostilefork.com/2013/10/20/qtcreator-debugger-no-locals-ubu ...

  7. 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述

    在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...

  8. Linux mint

    最近一直在配置vim, 今天终于配的差不多了,拿出来晒晒,^_^ . 附上一段Linux Mint 的简介(来自Wiki). Linux Mint是一种基于Ubuntu开发出的Linux操作系统.由L ...

  9. 网页中显示xml,直接显示xml格式的文件

    第一种方法 使用<pre></pre>包围代码(在浏览器中测试不行啊,但是在富编辑器中又可以,怪):使用<xmp></xmp>包围代码(官方不推荐,但是 ...

  10. P4773 红鲤鱼与绿鲤鱼

    P4773 红鲤鱼与绿鲤鱼 暑假比赛的一个水题 总情况数:\(\dfrac{(a+b)!}{a!b!}\) 就是\(a+b\)条鲤鱼中选\(a\) or \(b\)的情况 反正我们会用完鲤鱼,则红鲤鱼 ...