题目传送门

打算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. Ceph集群搭建及Kubernetes上实现动态存储(StorageClass)

    集群准备 ceph集群配置说明   节点名称 IP地址 配置 作用 ceph-moni-0 10.10.3.150 centos7.5 4C,16G,200Disk 管理节点,监视器 monitor ...

  2. jQuery使用(九):队列及实现原理、基于队列模拟实现animate()

    开篇一张图之队列模型 queue()如何使用? queue()原理实现? 基于queue()模拟实现animate() 一.使用queuer方法.理解队列原理 queue() dequeue() cl ...

  3. vue开发常用插件

    dependencies axios // 用于请求数据 better-scroll // 用于处理页面列表的滚动,下拉刷新等 fastclick // 用于处理移动设备点击会有300毫秒延迟的问题 ...

  4. PyQt5之窗口类型

    [TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 本文的主要内容:PyQt中的窗口部件:QMainWindow,QWidget,QDialog. 上述三 ...

  5. Centos7安装vsftpd (FTP服务器)

    Centos7安装vsftpd (FTP服务器) 原文链接:https://www.jianshu.com/p/9abad055fff6 TyiMan 关注 2016.02.06 21:19* 字数 ...

  6. C# 正则表达式贪婪模式案例

    案例一. 如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ...

  7. 可变有序列表list

    list是一种有序的集合,可以随时添加和删除其中的元素. 声明方法 list名=[元素1,元素2,元素3,--] >>> name=['Tom','David','Tony'] &g ...

  8. Java设计模式之装饰器模式

    1.装饰器模式的定义(保持接口,扩展功能) Decorate装饰器,顾名思义,就是动态的给一个对象添加一些额外的职责,就好比对房子进行装修一样. 2.装饰器模式的特征 具有一个装饰对象. 必须拥有与被 ...

  9. java对象在内存中的结构

    在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大 ...

  10. MapReduce Partition解析

    Map的结果,会通过partition分发到Reducer上,reducer操作过后会进行输出.输出的文件格式后缀000001就代表1分区. Mapper处理过后的键值对,是需要送到Reducer那边 ...