思路:一眼秒思路<(* ̄▽ ̄*)/
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. c++ 写进文件并读出

    #include <iostream>#include <fstream>#include <vector>#include <string> int ...

  2. 当Shell遇上了Node.js(转载)

    转载:http://developer.51cto.com/art/201202/315066.htm 好吧,我承认,这个标题有点暧昧的基情,但是希望下文的内部能给不熟悉或不喜欢Shell或WIN平台 ...

  3. 1961 躲避大龙(dfs)

    1961 躲避大龙  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 你早上起来,慢悠悠地来到学校门口,发现已经是 ...

  4. javascript之模块加载方案

    前言 主要学习一下四种模块加载规范: AMD CMD CommonJS ES6 模块 历史 前端模块化开发那点历史 require.js requirejs 为全局添加了 define 函数,你只要按 ...

  5. 原生JS---2

    js中的程序控制语句 常见的程序有三种执行结构: 1. 顺序结构 2. 分支结构 3. 循环结构 顺序结构:程序从第一行开始执行,按顺序执行到最后一行 分支结构:就像一条岔路口,必须选择且只能选择其中 ...

  6. 通过ASP.NET Ajax技术模拟实现NBA比赛文字直播功能

    文字直播是满足一些观看视频直播而条件不足的球迷所设定的比赛直播方式,例如在长途车上为了能够了解比赛的实时赛况但又限于流量和网速等问题,就出现了文字直播的方式.无论是拥有无线上网卡的笔记本电脑或者手机等 ...

  7. 附加MySQL数据库的方法

    下面讲解附加MySQL数据库的方法. (1)将“光盘\Code\04\Project\数据库”文件夹中的扩展名为.sql的文件拷贝到本地机器中. (2)在如图1所示的MySQL工作台界面中,单击Dat ...

  8. HangFire的定时任务和Quartz.NET总结(三)Quartz 配置

    在一个Net Core需求中,需要在每天的凌晨三点去抓取两个电商仓库的剩余的每个料号的数量来写会自己的表中, 用到了HangFire的定时任务 这篇文章讲的很详细记录下   文章2  这篇更简单 Qu ...

  9. [ller必读] LoveLive! 必备技能之 Python Pillow 自动处理截图

    起因 喜欢的歌,静静地听:喜欢的人,远远的看.30天前,就是3月14号,我情不自禁地走近了<LoveLive!学院偶像祭>,这是我的第一张卡片(见下图).第二天也就是3月15日,海未生日了 ...

  10. C#程序集版本控制文件属性祥解

    using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...