#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. iOS9 3D Touch使用

    http://www.cnblogs.com/zhanglinfeng/p/5133939.html

  2. 我的Android进阶之旅------>Android SDK支持的配置标识符(有用的参考文件)

    Android SDK支持的配置标致符 配置标识符 标识符值 描      述 MCC   MNC 例子: mcc310: MCC310-MNC004: MCC208-MNC00 MCC(移动国家代码 ...

  3. java面试之数据库面试知识点【转】

    1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中 ...

  4. python3里面的图片处理库 pillow

    在python2下用pil,而在python3下可以安装pillow 功能,在图片上加上几个字 #coding: utf-8 myPath = "./" fontPath = &q ...

  5. 读:Instance-aware Image and Sentence Matching with Selective Multimodal LSTM

    摘要:有效图像和句子匹配取决于如何很好地度量其全局视觉 - 语义相似度.基于观察到这样的全局相似性是由图像(对象)和句子(词)的成对实例之间的多个局部相似性的复合聚集,我们提出了一个实例感知图像和句子 ...

  6. python读取文件存到excel中

    用xlwt模块执行代码报下面的错 ValueError: column index (256) not an int in range(256) xlwt 模块看源码说最大列只支持255列,所以超过这 ...

  7. mathjax

    MathJax.Hub.Typeset() method. This will cause the preprocessors (if any were loaded) to run over the ...

  8. ios 表情编码

    感受 :可以做自定义键盘时候用  很方便 还可以在textView里面看到 用户体验很好~ 但是要和服务器管理员协商好,做好解析转码工作,不然网页上是不显示的. ios表情编码 在ios中可以使用可爱 ...

  9. Python partial function 偏函数

    Partial function 偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数. 当函数的参数个数太多, ...

  10. 【leetcode刷题笔记】Reverse Words in a String

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...