思路:一眼秒思路<(* ̄▽ ̄*)/
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# 正则表达式 和 JAVA表达式是想通的

    正则表达式语法 也许有人会说,现在需要正则表达式去验证什么的话,直接在网上找不久一大片吗?还需要学什么啊! 是的,现在在网上找确实是一找一大片,但是,有时候我们也遇到这样的情况,就是我们在网上找的复制 ...

  2. Firefox浏览器中,input输入框输入的内容在刷新网页后为何还在?

    转自:http://www.webym.net/jiaocheng/473.html 这个问题比较容易解决,如果不希望浏览器保留以前输入的内容,只要给对应的 input 输入框加上以下参数: auto ...

  3. sql将一个表中的数据插入到另一个表中

    sql将一个表中的数据插入到另一个表中 列名不一定要相同,只要你在HH中列出要插入列的列表跟select   from   mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的.  ...

  4. 深入理解Redis(番外)——持久化

    引语 Redis作为一款内存数据库,自然所有数据都加载在内存中,那么自然就有小伙伴会问,如果服务器宕机了怎么办,数据不都丢了吗,不用担心,Redis早就提供了两种方式来将数据进行持久化,即便服务器宕机 ...

  5. BZOJ 1914 计算几何

    思路: 我们可以算不合法的 如果三个点都在同一侧 就不合法.. 用总方案数减掉就可以了 (有神奇的实现方法...) //By SiriusRen #include <cmath> #inc ...

  6. Apache 虚拟主机 配置方法

    打开httpd.conf文件 去掉LoadModule vhost_alias_module modules/mod_vhost_alias.so前面的#号 去掉Include conf/extra/ ...

  7. xcode制作越狱后ipa安装文件

    正常情况下发布测试版给用户需要问到对方设备ID并添加到开发者证书里去感觉有点麻烦,如果是已越狱过的机器可以使用xcode制作ipa文件,并直接用itunes同步进去,这样方便多了. 将运行目标选为iO ...

  8. VUE-搜索过滤器

    先看看效果 首先引入 <script src="https://cdn.jsdelivr.net/npm/vue"></script> HTML部分 < ...

  9. .NET Core & EntityFrameworkCore

    前言 .NET Core 相比于 .NET Fromework 有跨平台.轻量化且开源的优势. 在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都 ...

  10. 用VS Code Debug Python