Description

有一颗 \(n\) 个节点的树,\(k\) 次旅行,问每一条边被走过的次数。

Input

第一行一个整数 \(n\) (\(2\leq n\leq 10^5\))。

接下来 \(n-1\) 行,每行两个正整数 \(x,y\) (\(1\leq x,y\leq n,x\neq y\)),表示 \(x\)与 \(y\) 之间有一条连边。

接下来一个整数 \(k\) (\(0\leq k\leq 10^5\) )。

接下来 \(k\) 行,每行两个正整数 \(x,y\) (\(1\leq x,y\leq n\) ),表示有一个从 \(x\) 到 \(y\) 的旅行。

Output

共\(n-1\)个整数,中间由一个空格隔开。

这不是一道裸的边差分 emmm.

不过是输出一下每条边的被经过次数罢了。

不了解树上差分的来这里

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#define int long long
#define R register using namespace std; const int gz=1e5+8; inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
} int head[gz],tot,ans[gz],n,k; struct cod{int u,v;}edge[gz<<1]; inline void add(R int x,R int y)
{
edge[++tot].u=head[x];
edge[tot].v=y;
head[x]=tot;
} int depth[gz],f[gz][21],cnt[gz]; void dfs(R int u,R int fa)
{
f[u][0]=fa;depth[u]=depth[fa]+1;
for(R int i=1;(1<<i)<=depth[u];i++)
f[u][i]=f[f[u][i-1]][i-1];
for(R int i=head[u];i;i=edge[i].u)
{
if(edge[i].v==fa)continue;
dfs(edge[i].v,u);
}
} inline int lca(R int x,R int y)
{
if(depth[x]>depth[y])swap(x,y);
for(R int i=20;i>=0;i--)
if(depth[x]+(1<<i)<=depth[y])
y=f[y][i];
if(x==y)return y;
for(R int i=20;i>=0;i--)
{
if(f[x][i]==f[y][i])continue;
x=f[x][i],y=f[y][i];
}
return f[x][0];
} void dfs2(R int u,R int fa)
{
for(R int i=head[u];i;i=edge[i].u)
{
if(edge[i].v==fa)continue;
dfs2(edge[i].v,u);
cnt[u]+=cnt[edge[i].v];
ans[(i+1)>>1]=cnt[edge[i].v];
}
} signed main()
{
in(n);
for(R int i=1,x,y;i<n;i++)
{
in(x),in(y);
add(x,y);add(y,x);
}
dfs(1,0);
in(k);
for(R int i=1,x,y;i<=k;i++)
{
in(x),in(y);
R int la=lca(x,y);
cnt[x]++,cnt[y]++,cnt[la]-=2;
}
dfs2(1,0);
for(R int i=1;i<n;i++)printf("%lld ",ans[i]);
}

最新文章

  1. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
  2. 用VC2010以上版本编译可以在低版本XP和2003的运行程序的方法
  3. sql server的优缺点
  4. OpenGL FrameBufferCopy相关Api比较(glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D)
  5. 【python】PIL 批量绘制图片矩形框工具
  6. WIN7管理工具配置ODBC数据源-系统DSN中无Oracle,Sybase驱动的解决方法
  7. iOS通过http post上传图片 (转)
  8. c程序设计语言_习题7-6_对比两个输入文本文件_输出它们不同的第一行_并且要记录行号
  9. 协程的作用 Python
  10. HDOJ(HDU) 2132 An easy problem
  11. 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .
  12. zTree根据json选中节点,并且设置其他节点不可选
  13. idea找不到package下的mapper.xml文件
  14. gitlab6 nginx配置和启动脚本
  15. Python3科学计算库概况
  16. 使用Kdenlive为视频加入马赛克特效
  17. Kerberos 互信免登陆
  18. vue axios请求/响应拦截器
  19. Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口
  20. PHP切割字符用到的explode 以及计数count

热门文章

  1. HDU 6203 ping ping ping(贪心+LCA+DFS序+BIT)
  2. [BZOJ1921] [CTSC2010]珠宝商
  3. BZOJ1452 [JSOI2009]Count 【树套树 (树状数组)】
  4. 洛谷 P2501 [HAOI2006]数字序列 解题报告
  5. 【BZOJ 2006】[NOI2010]超级钢琴 ST
  6. JavaScript使用数组拼接字符串性能如何?
  7. Ubuntu下安装LNMP之独立添加php扩展模块
  8. poj3683 2-sat Priest John&#39;s Busiest Day
  9. 解析json方式之net.sf.json
  10. VC++使用CImage PNG转BMP图片透明背景处理