题目链接:Codeforces 191C Fools and Roads

题目大意:给定一个N节点的数。然后有M次操作,每次从u移动到v。问说每条边被移动过的次数。

解题思路:树链剖分维护边,用一个数组标记就可以,不须要用线段树。

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int maxn = 1e5 + 5; int N, Q, ne, first[maxn], f[maxn], jump[maxn * 2];
int id, idx[maxn], top[maxn], far[maxn], son[maxn], dep[maxn], cnt[maxn]; struct Edge {
int u, v;
void set (int u, int v) {
this->u = u;
this->v = v;
}
}ed[maxn * 2]; void dfs (int u, int pre, int d) {
far[u] = pre;
dep[u] = d;
cnt[u] = 1;
son[u] = 0; for (int i = first[u]; i + 1; i = jump[i]) {
int v = ed[i].v;
if (v == pre)
continue;
dfs(v, u, d + 1);
cnt[u] += cnt[v];
if (cnt[son[u]] < cnt[v])
son[u] = v;
}
} void dfs(int u, int rot) {
top[u] = rot;
idx[u] = ++id;
if (son[u])
dfs(son[u], rot);
for (int i = first[u]; i + 1; i = jump[i]) {
int v = ed[i].v;
if (v == far[u] || v == son[u])
continue;
dfs(v, v);
}
} inline void add_Edge(int u, int v) {
ed[ne].set(u, v);
jump[ne] = first[u];
first[u] = ne++;
} void init () {
int u, v;
ne = id = 0;
memset(first, -1, sizeof(first));
scanf("%d", &N);
for (int i = 1; i < N; i++) {
scanf("%d%d", &u, &v);
add_Edge(u, v);
add_Edge(v, u);
}
dfs(1, 0, 0);
dfs(1, 1);
for (int i = 0; i < N - 1; i++) {
int t = i * 2;
if (dep[ed[t].u] < dep[ed[t].v])
swap(ed[t].u, ed[t].v);
}
} inline void add (int l, int r) {
f[l]++, f[r + 1]--;
} void solve (int u, int v) {
int p = top[u], q = top[v];
while (p != q) {
if (dep[p] < dep[q]) {
swap(p, q);
swap(u, v);
}
add(idx[p], idx[u]); u = far[p];
p = top[u];
} if (u == v)
return; if (dep[u] > dep[v])
swap(u, v);
add(idx[son[u]], idx[v]);
} int main () {
init(); scanf("%d", &Q);
int u, v;
while (Q--) {
scanf("%d%d", &u, &v);
solve(u, v);
} int mv = 0;
for (int i = 1; i <= N; i++) {
mv += f[i];
f[i] = mv;
} printf("%d", f[idx[ed[0].u]]);
for (int i = 1; i < N - 1; i++)
printf(" %d", f[idx[ed[i*2].u]]);
printf("\n");
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

Codeforces 191C Fools and Roads(树链拆分)的更多相关文章

  1. Codeforces 191 C Fools and Roads (树链拆分)

    主题链接~~> 做题情绪:做了HDU 5044后就感觉非常easy了. 解题思路: 先树链剖分一下,把树剖分成链,由于最后全是询问,so~能够线性操作.经过树链剖分后,就会形成很多链,可是每条边 ...

  2. hdu5044 Tree 树链拆分,点细分,刚,非递归版本

    hdu5044 Tree 树链拆分.点细分.刚,非递归版本 //#pragma warning (disable: 4786) //#pragma comment (linker, "/ST ...

  3. CF 191C Fools and Roads lca 或者 树链剖分

    They say that Berland has exactly two problems, fools and roads. Besides, Berland has n cities, popu ...

  4. CF191C Fools and Roads - 树剖解法

    Codeforces Round #121 (Div. 1) C. Fools and Roads time limit per test :2 seconds memory limit per te ...

  5. HYSBZ 2243 染色 (树链拆分)

    主题链接~~> 做题情绪:这题思路好想.调试代码调试了好久.第一次写线段树区间合并. 解题思路: 树链剖分 + 线段树区间合并 线段树的端点记录左右区间的颜色.颜色数目.合并的时候就用区间合并的 ...

  6. poj 3237 Tree(树链拆分)

    题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为v NEGATE a b:将ab路径上全部节点的权值变为相反数 QUERY a b:查询a ...

  7. hdu 4912 Paths on the tree(树链拆分+贪婪)

    题目链接:hdu 4912 Paths on the tree 题目大意:给定一棵树,和若干个通道.要求尽量选出多的通道,而且两两通道不想交. 解题思路:用树链剖分求LCA,然后依据通道两端节点的LC ...

  8. BZOJ 3589 动态树 树链拆分+纳入和排除定理

    标题效果:鉴于一棵树.每个节点有一个右值,所有节点正确启动值他们是0.有两种操作模式,0 x y代表x右所有点的子树的根值添加y. 1 k a1 b1 a2 b2 --ak bk代表质疑. 共同拥有者 ...

  9. POJ 3237 Tree (树链拆分)

    主题链接~~> 做题情绪:了. 解题思路: 主要注意如何区间更新就ok了 . 树链剖分就是树上的线段树. 代码: #include<iostream> #include<sst ...

随机推荐

  1. Inno Setup 安装inf文件的一个例子

    原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/ ; INF安装例子; [Setup]; 注意: AppId 的值是唯 ...

  2. lastcomm搜索并显示以前执行过的命令信息

    lastcomm搜索并显示以前执行过的命令信息

  3. DevC++ 工程没有调试信息的解决办法

    DevC++4.9.9.2中,按 F8 开始调试.提示信息为:工程没有调试信息,您想打开工程的调试选项并重新生成吗?选择是后,再按F8,仍旧是这个信息.什么原因呢? 按照帮助,Frequently A ...

  4. Kinect for windows 破解 一,简单的体感超级玛丽

    背景知识 1.  游戏模拟器:现在有很多模拟器,让我们可以在PC上玩红白机,PS上的游戏.本破解用的FC 红白机模拟器.网上有很多地方可以下载.注意语言要和你的操作系统一致. 2.  按键模拟器:本破 ...

  5. Linux 程序启停脚本

    start.sh #!/bin/sh java -jar ./program.jar & echo $! > /var/run/program.pid stop.sh #!/bin/sh ...

  6. [置顶] ANT build.xml文件详解

    Ant的优点 跨平台性.Ant是用Java语言编写的,所示具有很好的跨平台性. 操作简单.Ant是由一个内置任务和可选任务组成的. Ant运行时需要一个XML文件(构建文件). Ant通过调用targ ...

  7. About Quick Packaging and Custom Packaging

    About Quick Packaging and Custom Packaging The Enterprise Manager Support Workbench provides two met ...

  8. HTML构成及基本标签

    超文本标记语言:HTML W3C:互联网联盟 注释语法:<!--注释掉的内容--> 标签格式: 双标签元素:<标签名 属性 style="样式">内容< ...

  9. iOS开发--系统通讯录的访问与添加联系人

    公司项目有访问通讯录的需求,所以开始了探索之路.从开始的一无所知,到知识的渐渐清晰.这一切要感谢广大无私分享的 “coder”,注:我是尊称的语气! 苹果提供了访问系统通讯录的框架,以便开发者对系统通 ...

  10. codevs1304 拓扑序计数

    题目描述                     Description 求一颗有根树/树形图的拓扑序个数. 输入描述                 Input Description        ...