J - Assign the task

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 50010
using namespace std;
int t,n,m;
int sz,tot,sum,root;
int to[MAXN*],net[MAXN*],head[MAXN];
int dad[MAXN],idl[MAXN],idr[MAXN],edge[MAXN];
struct nond{
int l,r,flag;
}tree[MAXN*];
void add(int u,int v){
to[++tot]=v;net[tot]=head[u];head[u]=tot;
}
void build(int now,int l,int r){
tree[now].l=l;tree[now].r=r;
tree[now].flag=-;
if(tree[now].l==tree[now].r) return ;
int mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
}
void down(int now){
tree[now*].flag=tree[now*+].flag=tree[now].flag;
tree[now].flag=-;
return ;
}
void change(int now,int l,int r,int pos){
if(tree[now].l==l&&tree[now].r==r){
tree[now].flag=pos;
return ;
}
if(tree[now].flag!=-) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) change(now*,l,r,pos);
else if(l>mid) change(now*+,l,r,pos);
else { change(now*,l,mid,pos);change(now*+,mid+,r,pos); }
}
int query(int now,int x){
if(tree[now].l==tree[now].r)
return tree[now].flag;
if(tree[now].flag!=-) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(x<=mid) return query(now*,x);
else return query(now*+,x);
}
void dfs(int now){
idl[now]=++sz;
for(int i=head[now];i;i=net[i])
if(dad[now]!=to[i]){
dad[to[i]]=now;
dfs(to[i]);
}
idr[now]=++sz;
}
int main(){
scanf("%d",&t);
while(t--){
sum++;printf("Case #%d:\n",sum);
scanf("%d",&n);tot=;
for(int i=;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
add(v,u);edge[u]++;
}
for(int i=;i<=n;i++)
if(edge[i]==){ root=i;break; }
dfs(root);build(,,sz);
scanf("%d",&m);
for(int i=;i<=m;i++){
char c;int x,y;
scanf("\n%c%d",&c,&x);
if(c=='T'){
scanf("%d",&y);
change(,idl[x],idr[x],y);
}
else printf("%d\n",query(,idl[x]));
}
root=;sz=;
memset(to,,sizeof(to));
memset(idl,,sizeof(idl));
memset(idr,,sizeof(idr));
memset(net,,sizeof(net));
memset(dad,,sizeof(dad));
memset(edge,,sizeof(head));
memset(head,,sizeof(head));
}
}
/*
1
5
4 3
3 2
1 3
5 2
5
C 3
T 2 1
C 3
T 3 2
C 3
*/
J - Assign the task的更多相关文章
- J - Assign the task - hdu 3974(DFS建树+简单线段树)
题意:给一些节点简单额对应关系,可以组成一个树,如果树的某一个节点更新那么他的所有子节点都要更新,中间,会有一些查询 分析:题意倒也不难理解,但是但是不知道怎么建树...于是自能百度,看了kuangb ...
- HDU 3974 Assign the task 暴力/线段树
题目链接: 题目 Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU3974 Assign the task
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 3974 Assign the task(简单线段树)
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 3974 Assign the task 并查集/图论/线段树
Assign the task Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- hdu 3874 Assign the task
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- [Assign the task][dfs序+线段树]
http://acm.hdu.edu.cn/showproblem.php?pid=3974 Assign the task Time Limit: 15000/5000 MS (Java/Other ...
- HDU 3974 Assign the task
Assign the task Problem Description There is a company that has N employees(numbered from 1 to N),ev ...
- hdu3974 Assign the task dfs序+线段树
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
随机推荐
- 使用匿名类型做为ComboBox的DataSource
使用匿名类型做为ComboBox的DataSource ArrayList list = new ArrayList(); list.Add(new { id = " ...
- python-day4 运算符,if判断, for循环
1.运算符 算术运算符 + - * / % 赋值运算符 = += -= 比较运算符 == < <= > >= != 逻辑 ...
- 【Linux】Vi中的各种命令
Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所做的修 ...
- Percona Xtrabackup备份及恢复
1. http://www.percona.com/software/percona-xtrabackup下载并安装 2. 全量备份 a.全量备份到制定目录 innobacku ...
- nginx设置跳转https
在监听80端口的内部,添加一句代码:rewrite ^(.*)$ https://$host$1 permanent;
- 插入DOM元素
插入Dom元素两种情况: 1.要插入的元素是从页面中获取的dom结构 ,例如:$(".item") 2.要插入的元素是通过变量存储的dom结构,例如:var html = &quo ...
- hibernate与spring整合
Spring与Hibernate整合关键点: 1) Hibernate的SessionFactory对象交给Spring创建: 2) hibernate事务交给spring的声明式事务管理. 1. D ...
- 利用Xpath和jQuery进行元素定位示例
利用Selenium在做前端UI自动化的时候,在元素定位方面主要使用了XPATH和jQuery两种方法.XPATH作为主要定位手段,jQuery作为补充定位手段.因为在通过XPATH进行定位的时候,S ...
- 【剑指Offer】39、平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树.这里的定义是:如果某二叉树中任意结点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 解题思路: 首先对于本题我们要 ...
- C#第三节课(2)
运算符 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.T ...