首页 > 其他分享 >POJ - 3321 Apple Tree

POJ - 3321 Apple Tree

时间:2023-03-22 18:33:26浏览次数:62  
标签:Apple idx fa int timestamp void ne 3321 POJ

原题链接

思路

答案不好直接维护,所以,我们可以采用 DFS 序来解决这一问题。

设 \(l_u\) 是以 \(u\) 为根的子树中最小的时间戳,\(r_u\) 是以 \(u\) 为根的子树中最大的时间戳。那么所有 \(u\) 的祖先构成的集合 \(fa_u\),对于任意元素 \(x\in fa_u\),都有 \([l_u,r_u]\subseteq [l_x,r_x]\)。

知道了这个性质以后,就可以维护了。

代码

#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010,M = 2 * N;
int n,m;
int h[N],e[M],ne[M],idx;
int d[N];
int c[N];
int l[N],r[N],timestamp;
void add (int a,int b) {
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}
void dfs (int u,int fa) {
	l[u] = ++timestamp;
	for (int i = h[u];~i;i = ne[i]) {
		int j = e[i];
		if (j == fa) continue;
		dfs (j,u);
	}
	r[u] = timestamp;
}
int lowbit (int x) {
	return x & -x;
}
void modify (int x,int d) {
	for (int i = x;i <= n;i += lowbit (i)) c[i] += d;
}
int query (int x) {
	int ans = 0;
	for (int i = x;i;i -= lowbit (i)) ans += c[i];
	return ans;
}
int main () {
	memset (h,-1,sizeof (h));
	scanf ("%d",&n);
	for (int i = 1;i <= n - 1;i++) {
		int a,b;
		scanf ("%d%d",&a,&b);
		add (a,b),add (b,a);
	}
	dfs (1,-1);
	for (int i = 1;i <= n;i++) modify (i,1),d[i] = 1;
	scanf ("%d",&m);
	while (m--) {
		char op[2];
		int x;
		scanf ("%s%d",op,&x);
		if (*op == 'C') {
			if (d[x]) modify (l[x],-1),d[x] = 0;
			else modify (l[x],1),d[x] = 1;
		}
		else printf ("%d\n",query (r[x]) - query (l[x] - 1));
	}
    return 0;
}

标签:Apple,idx,fa,int,timestamp,void,ne,3321,POJ
From: https://www.cnblogs.com/incra/p/17245046.html

相关文章

  • Can not set java.lang.String field com.jsedc.log.pojo.entity.voSyslogV0.happenT
    未加泛型约束的result,其List中的实体对象会被序列化为LinkedHashMap,实际结构为Result<List<LinkedHashMap<String,String>>>导出excel时对象赋值失败......
  • [POJ] 2251地牢大师
    来源:《信息学奥赛一本通》,POJ2251算法标签BFS题目描述你现在被困在一个三维地牢中,需要找到最快脱离的出路!地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通......
  • apple M1 python开发,django,安装mysqlclient并使用
    前言此笔记记录了MBPM1芯片的苹果本,解决mysqlclient虽然安装成功,但是会遇到_namenotdefound的解决办法解决过程内容参考:https://github.com/PyMySQL/mysqlclient/iss......
  • 解决:无法获取实体类com.xxx.pojo.AppUser对应的表名
    问题:在Application启动类中使用的@MapperScan注解,导入的包为:org.mybaties.spring.annotation.MapperScan解决:导入包改为:tk.mybatis.spring.annotation.MapperScan,解......
  • Apple开发者使用Github Copilot
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!因此,您注册并加入了GithubCopilot等候名单,等了一会儿,收到了邀请,在您的VSCo......
  • Apple Catching POJ - 2385
     有个人在2柯树之间来回,在1~T的时刻i时,其中一颗棵树会掉一个果子,规定只能掉头m次,问最多能获得多少果子  f[i][j]#include<iostream>#include<algorithm>......
  • Polygon POJ - 1179
       除了维护一个区间最大值,还要一个最小值,(有负数)  #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=160......
  • Communication System POJ - 1018
    目前有一个公司需要购进宽带设备,每种设备有多款机器供选择,每种设备都需购进一台,现给出每台设备的带宽p与价格q,要求选择设备的最小带宽min(p)/add(q)(其中min(p)表示所有购......
  • 如何实现一个类似 Apple 网站的短信验证码登录组件 All In One
    如何实现一个类似Apple网站的短信验证码登录组件AllInOne支持短信,复制粘贴自动填充支持自动聚焦,自动校验输入完成,支持自动发起确认请求(无需手动点击确认按钮)......
  • AppUploader教程:如何使用该工具制作Apple证书​
    AppUploader教程:如何使用该工具制作Apple证书​AppUploader下载安装操作​AppUploader是一款方便快捷的开发者工具,提供了多项实用的功能。本文将介绍AppUploader的下载和安......