HDU 3974 Assign the task 并查集/图论/线段树
Assign the task
Time Limit: 1 Sec Memory Limit: 256 MB
题目连接
http://acm.hdu.edu.cn/showproblem.php?pid=3974
Description
The company usually assigns
some tasks to some employees to finish.When a task is assigned to
someone,He/She will assigned it to all his/her subordinates.In other
words,the person and all his/her subordinates received a task in the
same time. Furthermore,whenever a employee received a task,he/she will
stop the current task(if he/she has) and start the new one.
Write
 a program that will help in figuring out some employee’s current task
after the company assign some tasks to some employee.
Input
The first line contains a single positive integer T( T <= 10 ), indicates the number of test cases.
For each test case:
The first line contains an integer N (N ≤ 50,000) , which is the number of the employees.
The
 following N - 1 lines each contain two integers u and v, which means
the employee v is the immediate boss of employee u(1<=u,v<=N).
The next line contains an integer M (M ≤ 50,000).
The following M lines each contain a message which is either
"C x" which means an inquiry for the current task of employee x
or
"T x y"which means the company assign task y to employee x.
(1<=x<=N,0<=y<=10^9)
Output
For each test case, print the test case number (beginning with 1) in the first line and then for every inquiry, output the correspond answer per line.
Sample Input
1 
5 
4 3 
3 2 
1 3 
5 2 
5 
C 3 
T 2 1
 C 3 
T 3 2 
C 3
Sample Output
HINT
题意
给你一个森林,有两个操作
1.让某一个点,和他的儿子们全部染成X
2.查询某一个点是什么权值
题解:
当成单纯的图论跑一发就好,对于每一个查询直接跑到根位置就好,更新的时候,注意更新的时间问题
线段树也可以做,把一颗树的,全部放在一起,然后就区间更新就好,对于每一个点,记录他的位置,和他儿子最远能到哪儿。
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 200001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
//**************************************************************************************
inline ll read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
struct node
{
int x,y;
}a[maxn];
int pa[maxn];
int main()
{
char s[];
int b,c;
int t=read();
for(int cas=;cas<=t;cas++)
{
int n=read();
memset(a,,sizeof(a));
memset(pa,-,sizeof(pa));
for(int i=;i<n-;i++)
{
int u=read(),v=read();
pa[u]=v;
}
for(int i=;i<=n;i++)
{
a[i].x=-;
a[i].y=-;
}
int m=read();
printf("Case #%d:\n",cas);
int co=;
for(int i=;i<m;i++)
{
scanf("%s",s);
if(s[]=='C')
{
b=read();
int k=a[b].x;
int y=a[b].y;
while(b!=-)
{
if(a[b].y>y)
{
k=a[b].x;
y=a[b].y;
}
b=pa[b];
}
printf("%d\n",k);
}
else
{
b=read(),c=read();
a[b].x=c;
a[b].y=++co;
}
}
}
}
HDU 3974 Assign the task 并查集/图论/线段树的更多相关文章
- HDU 3974 Assign the task 并查集
		
http://acm.hdu.edu.cn/showproblem.php?pid=3974 题目大意: 一个公司有N个员工,对于每个员工,如果他们有下属,那么他们下属的下属也是他的下属. 公司会给员 ...
 - hdu 3974 Assign the task(dfs序上线段树)
		
Problem Description There is a company that has N employees(numbered from 1 to N),every employee in ...
 - 【BZOJ2054】疯狂的馒头(并查集,线段树)
		
[BZOJ2054]疯狂的馒头(并查集,线段树) 题面 BZOJ 然而权限题,随便找个离线题库看看题吧. 题解 线段树就是个暴力,如果数据可以构造就能卡掉,然而不能构造,要不然复杂度瓶颈成为了读入了. ...
 - HDU 3974 Assign the task 暴力/线段树
		
题目链接: 题目 Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
 - HDU 3974 Assign the task
		
Assign the task Problem Description There is a company that has N employees(numbered from 1 to N),ev ...
 - HDU 3974 Assign the task (DFS序 + 线段树)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 给你T组数据,n个节点,n-1对关系,右边的是左边的父节点,所有的值初始化为-1,然后给你q个操 ...
 - HDU 3974 Assign the task(DFS序+线段树单点查询,区间修改)
		
描述There is a company that has N employees(numbered from 1 to N),every employee in the company has a ...
 - 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(线段树)
		
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3974 题意:给定一棵树,50000个节点,50000个操作,C x表示查询x节点的值,T x y表示更 ...
 
随机推荐
- 使用SPLUNK进行简单Threat Hunting
			
通过订阅网上公开的恶意ip库(威胁情报),与SIEM平台中网络流量日志进行匹配,获得安全事件告警. 比如,这里有一个malware urls数据下载的网站,每天更新一次: https://urlhau ...
 - Class类和ClassLoader类的简单介绍
			
反射机制中的Class Class内部到底有什么呢?看下图! 代码: Class cls=Person.class; 1.Class类: 1. 对象照镜子后可以得到的信息:某个类的数据成员名,方法和构 ...
 - 图片异或(xor)getflag
			
题目地址:https://files.cnblogs.com/files/nul1/flag_enc.png.tar 这题是源于:网鼎杯minified 经过测试隧道红色最低通道异常.其余均正常.所以 ...
 - xss自动化攻击
			
所需工具 [1.xssValidator] [2.phantomjs] [3.xss.js] /** * This is a basic phantomJS script that will be u ...
 - 01布尔模型&倒排索引
			
原文链接: http://www.cnblogs.com/jacklu/p/8379726.html 博士一年级选了这门课 SEEM 5680 Text Mining Models and Appli ...
 - c++动态规划dp算法题
			
问题1:找硬币,换钱的方法 输入: penny数组代表所有货币的面值,正数不重复 aim小于等于1000,代表要找的钱 输出:换钱的方法总数 解法1:经典dp,空间复杂度O(n*aim) class ...
 - scrapy使用PhantomJS和selenium爬取数据
			
1.phantomjs 安装 下载:http://phantomjs.org/download.html 解压: tar -jxvf phantomjs--linux-x86_64.tar.bz2 重 ...
 - Educational Codeforces Round 25 D - Suitable Replacement(贪心)
			
题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多. 解题思路: 因为知道s中的 ...
 - Go语言入门之指针的使用
			
指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...
 - GO语言Windows下Liteide
			
今天用到了. 就学习一下. https://www.golangtc.com/t/56e7caf5b09ecc66b90000fe 在网上看了好多此类介绍,操作太麻烦,自己琢磨出来怎么配置了. 以Li ...