大都市meg bzoj-1103 POI-2007

题目大意:给定一颗n个点的树,m次操作。将一条路的边权更改成0;查询一个点到根节点的点权和。开始的时候所有边的边权都是1。

注释:$1\le n,m\le 2.5\cdot 10^5$。


想法:我们先拉出dfs序。其实严格来讲是出栈入栈序,就是每个点在序上出现两次的那个。

开始的时候入栈时的点权是1,出栈是-1。修改就是把出栈入栈都改成0。然后用树状数组查询前缀和即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 250010
using namespace std;
int tree[N<<1],val[N<<1],head[N],to[N<<1],nxt[N<<1],tot,cnt;
int dic[N<<1];
struct Node
{
int x,y;
}a[N];
inline int lowbit(int x) {return x&(-x);}
void fix(int x,int delta)
{
for(int i=x;i<=cnt+1;i+=lowbit(i))
{
// puts("fix");
tree[i]+=delta;
}
}
int query(int x)
{
int ans=0;
for(int i=x;i>=1;i-=lowbit(i))
{
// puts("query");
ans+=tree[i];
}
return ans;
}
inline void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void dfs(int pos,int fa)
{
// if(a[pos].x) puts("FUCK");
dic[++cnt]=pos;
// cnt++;
val[cnt]=1;
a[pos].x=cnt;
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa) continue;
dfs(to[i],pos);
}
dic[++cnt]=pos;
// cnt++;
val[cnt]=-1;
a[pos].y=cnt;
}
int main()
{
int n; cin >> n ;
int x,y;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
dfs(1,0);
val[1]=0;
val[cnt]=0;
for(int i=1;i<=cnt;i++)
{
fix(i,val[i]);
}
// printf("Gun %d\n",cnt);
// for(int i=1;i<=cnt;i++)
// {
// printf("Shit %d\n",dic[i]);
// }
// puts("--------------------------------------");
int m; cin >> m ;
char opt[10];
// for(int i=1;i<=n;i++) printf("%d %d\n",a[i].x,a[i].y);
for(int i=1;i<=n+m-1;i++)
{
// printf("Fuck %d\n",i);
scanf("%s",opt+1);
if(opt[1]=='A')
{
scanf("%d%d",&x,&y);
if(x>y) swap(x,y);
fix(a[y].x,-1);
fix(a[y].y,1);
}
else
{
scanf("%d",&x);
// printf("%d\n",query(3));
printf("%d\n",query(a[x].x));
}
}
return 0;
}

小结:简单题。

最新文章

  1. Dagger2 (二) 进阶篇
  2. js 防止页面后退的方法
  3. BrowserSync前端调试工具使用
  4. NBU expired Media,Media ID not found in EMM database
  5. Understanding, Operating and Monitoring Apache Kafka
  6. BeanFactory not initialized or already closed - call &#39;refresh&#39; before accessing beans解决办法
  7. tech
  8. MyEclipse编码设置
  9. 调试Python代码的工具
  10. Java基础知识强化之集合框架笔记30:集合之泛型的引入
  11. python进阶4--pywin32
  12. ASP.NET jQuery 随笔 使用jQuery UI的Autocomplete方法实现文本框的自动搜索填充功能
  13. Ubuntu_文件夹名字转化成英文
  14. PHP的PDO操作实例
  15. 浅谈java发射机制
  16. 什么是UUID?
  17. day10 while else continue break
  18. python(list、字典、元组、字符串方法、文件读写)草稿
  19. Confluence 6 自定义站点和空间布局
  20. java多线程系列11 juc包下的队列

热门文章

  1. mysql的启动和停止
  2. Hotel booking(spfa+floyd)
  3. js中的slice()、substring()、substr()、split()、join()、indexof()
  4. Python机器学习算法 — KNN分类
  5. CF1073C Vasya and Robot
  6. markdownpad2下载安装教程
  7. akka设计模式系列-基础模式
  8. java 锁机制(synchronized 与 Lock)
  9. CSS3悬浮动画效果
  10. oracle for linux服务器磁盘空间不足,通过过期的文件释放磁盘空间