思路:一眼秒思路<(* ̄▽ ̄*)/
dfs序+线段树。
通过dfs序把树上问题转化成线段上的问题。然后用线段树解决。
 
 错因:都是些zz的错误就不说了
 
#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的更多相关文章

  1. J - Assign the task - hdu 3974(DFS建树+简单线段树)

    题意:给一些节点简单额对应关系,可以组成一个树,如果树的某一个节点更新那么他的所有子节点都要更新,中间,会有一些查询 分析:题意倒也不难理解,但是但是不知道怎么建树...于是自能百度,看了kuangb ...

  2. HDU 3974 Assign the task 暴力/线段树

    题目链接: 题目 Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...

  3. HDU3974 Assign the task

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 3974 Assign the task(简单线段树)

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. HDU 3974 Assign the task 并查集/图论/线段树

    Assign the task Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  6. hdu 3874 Assign the task

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. [Assign the task][dfs序+线段树]

    http://acm.hdu.edu.cn/showproblem.php?pid=3974 Assign the task Time Limit: 15000/5000 MS (Java/Other ...

  8. HDU 3974 Assign the task

    Assign the task Problem Description There is a company that has N employees(numbered from 1 to N),ev ...

  9. 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 ...

随机推荐

  1. Android中关于内部存储的一些重要函数

    一.简介 Android中,你也可以通过绝对路径以JAVA传统方式访问内部存储空间.但是以这种方式创建的文件是对私有,创建它的应用程序对该文件是可读可写,但是别的应用程序并不能直接访问它.不是所有的内 ...

  2. SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理

     SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...

  3. B3680 吊打xxx 物理???

    看到一道很有意思的题,这个题简直有毒,是一道物理题...好像得用模拟退火...但显然我太弱了不会模拟退火,只能用正交分解暴力... 每次沿着力的方向走一定的距离,假如转头了,则走的步长就减小一点. 不 ...

  4. bzoj 1191 [ HNOI 2006 ] 超级英雄Hero —— 二分图匹配

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1191 就是二分图匹配的裸题: 注意题目要求是第一次匹配失败就退出!没仔细看题差点丢失1A. ...

  5. 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)

    P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...

  6. Django基础必备三件套: HttpResponse render redirect

    1. HttpResponse :  它的作用是内部传入一个字符串参数, 然后发给浏览器 def index(request): return HttpResponse('ok') 2. render ...

  7. [BZOJ2321,LuoguP1861]星(之)器

    丧心病狂的神仙题 丧心病狂的神仙题 丧心病狂的神仙题 显然,不管你怎么移动,答案都是一定的 然后我们很快能联系到物理里面的能量守恒,于是自然地我们要给每个点搞一个势能出来 然后把势能的表达式写出来就可 ...

  8. Python生成器(yield)

    对于调用一个普通的Python函数,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函数所有语句执行完毕.一旦函数将控制权交还给调用者,就意味着全部结束.函数中做的所有工作以及保存在 ...

  9. .net中的WebForm引人MVC的控制器

    当下.net中比较火的模式MVC模式,说实话对于菜鸟的我还没有遇到一个比较健全的MVC模式的项目也是比较遗憾.偶然间在网上看到WebForm实现MVC中的模式(主要是控制器...)就学习了一波,下面是 ...

  10. mongoose 操作 mongodb 笔记 (自己的笔记,自己看的)

    mongodb下载/安装 mongoose   npm install --save mongoose mongoose 数据库连接 const mongoose = require('mongoos ...