J - Assign the task - hdu 3974(DFS建树+简单线段树)
题意:给一些节点简单额对应关系,可以组成一个树,如果树的某一个节点更新那么他的所有子节点都要更新,中间,会有一些查询
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std; const int MAXN = ; int Start[MAXN], End[MAXN];//每个员工所有下属的开始和结束节点,包含本身
int index;//DFS用记录节点的编号
vector<int> G[MAXN];//保存边 void DFS(int k)
{
Start[k] = ++index;
for(int i=,len=G[k].size(); i<len; i++)
DFS(G[k][i]);
End[k] = index;
} struct SegmentTree
{
int L, R, task;
bool isCover;
int Mid(){return (L+R)/;}
}a[MAXN*]; void BuildTree(int r, int L, int R)
{
a[r].L = L, a[r].R = R;
a[r].task = -, a[r].isCover = false; if(L == R)return ; BuildTree(r<<, L, a[r].Mid());
BuildTree(r<<|, a[r].Mid()+, R);
}
void Down(int r)
{
if(a[r].L != a[r].R && a[r].isCover)
{
a[r<<].isCover = a[r<<|].isCover = true;
a[r<<].task = a[r<<|].task = a[r].task;
a[r].isCover = false;
}
}
void Insert(int r, int L, int R, int task)
{
Down(r); if(a[r].L == L && a[r].R == R)
{
a[r].isCover = true;
a[r].task = task;
return ;
} if(R <= a[r].Mid())
Insert(r<<, L, R, task);
else if(L > a[r].Mid())
Insert(r<<|, L, R, task);
else
{
Insert(r<<, L, a[r].Mid(), task);
Insert(r<<|, a[r].Mid()+, R, task);
}
}
int Query(int r, int k)
{
Down(r); if(a[r].L == a[r].R)
return a[r].task; if(k <= a[r].Mid())
return Query(r<<, k);
else
return Query(r<<|, k);
} int main()
{
int T, t=; scanf("%d", &T); while(T--)
{
int i, N, M, u, v; char s[]; scanf("%d", &N); for(i=; i<=N; i++)
G[i].clear();
bool use[MAXN] = {};
for(i=; i<N; i++)
{
scanf("%d%d",&u, &v);
G[v].push_back(u);
use[u] = true;
} index = ;
for(i=; i<=N; i++)if(!use[i]){
DFS(i); break;} BuildTree(, , N);
printf("Case #%d:\n", t++); scanf("%d", &M); while(M--)
{
scanf("%s", s); if(s[] == 'C')
{
scanf("%d", &u);
printf("%d\n", Query(, Start[u]));
}
else
{
scanf("%d%d", &u, &v);
Insert(, Start[u], End[u], v);
}
}
} return ;
}
J - Assign the task - hdu 3974(DFS建树+简单线段树)的更多相关文章
- Assign the task HDU - 3974 (dfs序 + 线段树)
有一家公司有N个员工(从1到N),公司里每个员工都有一个直接的老板(除了整个公司的领导).如果你是某人的直接老板,那个人就是你的下属,他的所有下属也都是你的下属.如果你是没有人的老板,那么你就没有下属 ...
- Assign the task HDU - 3974(dfs序+线段树)
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- J - Assign the task
J - Assign the task HDU - 3974 思路:一眼秒思路<(* ̄▽ ̄*)/ dfs序+线段树. 通过dfs序把树上问题转化成线段上的问题.然后用线段树解决. 错因:都 ...
- R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数
R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- bzoj3306: 树(dfs序+倍增+线段树)
比较傻逼的一道题... 显然求子树最小值就是求出dfs序用线段树维护嘛 换根的时候树的形态不会改变,所以我们可以根据相对于根的位置分类讨论. 如果询问的x是根就直接输出整棵树的最小值. 如果询问的x是 ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
随机推荐
- POJ 1696 Space Ant 卷包裹法
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3316 Accepted: 2118 Descrip ...
- Apache POI解析excel文件
这里需要用到poi.jar和poi-ooxml.jar 没有的可以去http://mvnrepository.com/下载 import org.apache.poi.POIXMLDocument; ...
- HDU 2639 (01背包第k优解)
/* 01背包第k优解问题 f[i][j][k] 前i个物品体积为j的第k优解 对于每次的ij状态 记下之前的两种状态 i-1 j-w[i] (选i) i-1 j (不选i) 分别k个 然后归并排序并 ...
- JSON和JSONP区别
JSON(JavaScript Object Notation)和JSONP(JSON with Padding) JSON是一种数据交换格式,JSONP是一种跨域数据交互协议 JSONP利用scri ...
- 使用ajax与服务器通信的步骤
使用ajax与服务器通信的步骤: 1. 创建一个XMLHttpRequest对象 2. 创建url,data,通过xmlHttpRequest.send() 3. 服务器端接收ajxa的请求,做相应处 ...
- js的异步的问题的再次理解
*js是实实在在的单线程语言,在一小个时刻,在(js的执行对列)只有一个执行,一个没有完,另一个必须等待,什么都不做,只有抖着腿的等; *本来语言本身是同步的,之所以是异步执行,是因为在浏览器环境中, ...
- 开发solr功能问题点
Criteria criteria = new Criteria(); public Criteria and(Criteria criteria) { this.criteriaChain.add( ...
- 关于svn获取获取文件时 Unable to connect to a repository at URL"https://..."执行上下文错误:参数错误
错误提示: 下面的六种解决方案都未能解决: 1.不提示输入用户名和密码,不管重装多少次都一样. 2.TortoiseSVN的setting->Saved Data->Authenticat ...
- ExtJs的事件机制Event(学员总结)
一.事件的三种绑定方式 1.HTML/DHTML 在标签中直接增加属性触发事件 [javascript] view plaincopy <script type="text/javas ...
- [转帖]AVS音视频编解码技术了解
AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...