[POI2007]MEG-Megalopolis (树状数组,Dfs序)
题目描述
## Solution
这道题考试的时候竟然没有仔细想,结果只拿了暴力分...
其实就是一个 DFS序+树状数组。
我们先把用 DFS 把它变成一个序列,同时记录它们的 \(siz\)。
那么我们每一次连一条边之后就是对它的子树产生影响。
在树状数组里面维护就好了。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=250008;
struct sj{
int to;
int next;
}a[maxn*2];
int head[maxn],size;
int n,m;
void add1(int x,int y)
{
a[++size].to=y;
a[size].next=head[x];
head[x]=size;
}
int id[maxn],tot;
int siz[maxn],ans[maxn];
void dfs(int x)
{
id[x]=++tot;
siz[x]=1;
for(int i=head[x];i;i=a[i].next)
{
int tt=a[i].to;
if(!siz[tt])
{
ans[tt]=ans[x]+1;
dfs(tt);
siz[x]+=siz[tt];
}
}
}
int c[maxn];
int lowbit(int x)
{return x&(-x);}
void add(int x,int z)
{for(int i=x;i<=n;i+=lowbit(i))c[i]+=z;}
int check(int x)
{
int sum=0;
for(int i=x;i>=1;i-=lowbit(i))
sum+=c[i];
return sum;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{int x,y; scanf("%d%d",&x,&y);add1(x,y); add1(y,x);}
dfs(1);
for(int i=1;i<=n;i++)
add(id[i],0);
scanf("%d",&m);
for(int i=1;i<=m+n-1;i++)
{
int x,y;char ch; cin>>ch;
if(ch=='A')
{
scanf("%d%d",&x,&y);
if(id[x]<id[y])swap(y,x);
add(id[x],1);
add(id[x]+siz[x],-1);
}
if(ch=='W')
scanf("%d",&x),
cout<<ans[x]-check(id[x])<<endl;
}
}
[POI2007]MEG-Megalopolis (树状数组,Dfs序)的更多相关文章
- BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1103 [题目大意] 给出一棵树,每条边的经过代价为1,现在告诉你有些路不需要代价了, ...
- 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
- 【BZOJ-1103】大都市meg 树状数组 + DFS序
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2009 Solved: 1056[Submit][Sta ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 508 Solved: 158[Submit][Sta ...
- POJ 3321 Apple Tree (树状数组+dfs序)
题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...
- [luogu P3787][新创无际夏日公开赛] 冰精冻西瓜 [树状数组][dfs序]
题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有 ...
- HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)
Tree chain problem Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)
题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...
随机推荐
- vue 修改端口
- pycharm 使用技巧
格式化代码为pep8: ctrl+alt+l http://edu.51cto.com//index.php?do=lession&id=163794
- prometheus-简介及安装
监控是整个产品周期中最重要的一环,及时预警减少故障影响免扩大,而且能根据历史数据追溯问题. 对系统不间断实时监控 实时反馈系统当前状态 保证业务持续性运行 监控系统 监控方案 告警 特点 适用 Zab ...
- AutoLayout处理UITableView动态高度
我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的 ...
- 【动态规划】51nod1780 完美序列
巧妙的转化:f前两维大小开反TLE了一发…… 如果一个序列的相邻两项差的绝对值小于等于1,那么我们说这个序列是完美的. 给出一个有序数列A,求有多少种完美序列排序后和数列A相同. Input 第一行一 ...
- CentOs 6.5设置使用私钥登录关闭ssh的密码登录修改ssh默认端口
使用SecureCRT工具创建RSA公钥和私钥 [选项]=>[会话选项] 然后在弹出对话框中选择[公钥]然后点击[属性]: 在弹出窗口中选中[使用会话公钥设置],点击[创建身份文件]按钮: 然后 ...
- python处理excel总结
工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果,比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的 ...
- ipvsadm启动报错解决方法
Centos7 yum -y install ipvadm 安装后,启动ipvsadm却报错. Redirecting to /bin/systemctl start ipvsadm.service ...
- python并发编程之线程剩余内容(线程队列,线程池)及协程
1. 线程的其他方法 import threading import time from threading import Thread,current_thread def f1(n): time. ...
- drf 视图功能
视图 drf提供的视图功能 自己的第一次封装 #一个功能写成一个类,方便组合,只要继承它就可以有这个功能 #将功能都写在一个类中,可控性就会变差 from book.myserializers imp ...