题目传送门

打算5分钟写完题解

题目大意

有一棵n个点的有根树, 初始时每条边均为红色,有两种操作:

  1. 把某条边染为蓝色
  2. 统计根到某一点路径上的红边数量

思路

  1. 用\(a_i\)表示根到点i路径上的红边数,修改边(u,v)时,不失一般性,设\(dep(u) < dep(v)\),那么以v为根的子树中,所有\(a_i\)都要减1。用线段树点查区改
  2. 用黑科技欧拉序,不失一般性,设\(dep(u) < dep(v)\),把边(u,v)的颜色下放到点v,线段树/树状数组点改区查即可。

关于欧拉序:算法导论中的DFS序好像就叫欧拉序,它有一个优越的性质:根到任意一点的路径对应欧拉序上的一段前缀区间

易错点

  • 树状数组维护的范围是\([1,2n]\),而不是\([1,n]\)
  • 无向边数组开2倍

代码

#include<iostream>
#include<cstdio>
using namespace std; const int maxn = 250007;
int n, m, C[maxn << 1];
int stamp, dep[maxn], tid[maxn], tif[maxn];
bool vis[maxn];
int edgenum, head[maxn], Next[maxn << 1], vet[maxn << 1]; inline void addedge(int u, int v){
++edgenum;
vet[edgenum] = v;
Next[edgenum] = head[u];
head[u] = edgenum;
} void DFS(int u, int D){
//printf("%d\n", u);
vis[u] = true; tid[u] = ++stamp; dep[u] = D;
for (int e = head[u]; e; e = Next[e]){
int v = vet[e];
if (!vis[v]) DFS(v, D+1);
}
tif[u] = ++stamp;
} inline void add(int i, int val){
for (; i <= n+n; i += (i & (-i)))
C[i] += val;
} inline int sum(int i){
int res = 0;
for (; i >= 1; i -= (i & (-i)))
res += C[i];
return res;
} int main(){
scanf("%d", &n);
for (int i = 1; i < n; ++i){
int u, v;
scanf("%d%d", &u, &v);
addedge(u,v);
addedge(v,u);
}
DFS(1, 1);
for (int i = 2; i <= n; ++i){
add(tid[i], +1);
add(tif[i], -1);
}
scanf("%d", &m);
for (int i = 1; i <= n + m - 1; ++i){
char T[2];
scanf("%s", T);
if (T[0] == 'A'){
int u,v;
scanf("%d%d", &u, &v);
if (dep[u] > dep[v]) swap(u, v);
add(tid[v], -1); add(tif[v], +1);
}else{
int a;
scanf("%d", &a);
printf("%d\n", sum(tid[a]));
}
}
return 0;
}

【BZOJ1103】大都市 解题报告的更多相关文章

  1. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  2. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  3. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  4. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  5. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  6. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  7. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  8. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  9. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

随机推荐

  1. MySQL_表锁_lock tables tableName read

    pre.环境准备 1.建立两个表S,T,并插入一些数据 --创建表S create table S(d int) engine=innodb; ); --创建表T create table T(c i ...

  2. Tomcat设计模式

    omcat 系统架构与设计模式,第 2 部分 设计模式分析 系列内容: 此内容是该系列 2 部分中的第 2 部分: Tomcat 系统架构与设计模式 门面设计模式 门面设计模式在 Tomcat 中有多 ...

  3. win10添加右键打开命令窗口

    新建文件cmd.reg,将下面代码贴入 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\she ...

  4. django分页器

    网站页面的分页效果可以通过分页器实现 分页器的使用 urls.py from django.contrib import admin from django.urls import path from ...

  5. 【转载】c++中浅复制与深复制

    https://www.cnblogs.com/xiaodingmu/p/7407307.html

  6. Spark Java API 计算 Levenshtein 距离

    Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...

  7. SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系

    sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据 ...

  8. jQuery1.9及以上版本检测IE版本号

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. ...

  9. java(8)二重循环

    一.二重循环 1.循环中,嵌套另外一个循环,将内层的循环,看成外层循环的一个循环操作 2.常见的二重循环 形式1:      外层while或do…while 内层为for循环 形式2: 外层.内层都 ...

  10. nginx 中用 sed 批量增加配置文件内容

    #!/bin/bash confs=`ls /etc/nginx/conf.d/cms_vhosts/` cd /etc/nginx/conf.d/cms_vhosts for log in $con ...