http://acm.hdu.edu.cn/showproblem.php?pid=3974

题目大意:

一个公司有N个员工,对于每个员工,如果他们有下属,那么他们下属的下属也是他的下属。

公司会给员工安排任务,分配给一个员工后,他也会把这个任务分配给下属。被分配到任务的人立刻停止 当前在做的工作,接受新的任务。

对于给定的M个操作

C x  输出编号为x的任务

T x y  分配任务y给x

思路:

并查集的实现,分配我们只记录在上司结点里,只不过查询的时候要把它的所有上司全部找一遍。

#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=50001;
int fa[MAXN];
int val[MAXN];
int time[MAXN];
int main()
{
int T;
scanf("%d",&T);
for(int ri=1;ri<=T;ri++)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
fa[i]=i;
val[i]=-1;
time[i]=-1;
} for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
fa[a]=b;
} printf("Case #%d:\n",ri);
int m,cnt=0;
scanf("%d",&m);
char cmd;
while(m--)
{
cin>>cmd;
if(cmd=='C')
{
int x;
scanf("%d",&x);
int cur=x,ans=val[cur],lastt=-1;
while(cur != fa[cur])
{
if(time[cur] > lastt)//后加入的
{
lastt=time[cur];
ans=val[cur];
}
cur=fa[cur];
} if(time[cur] > lastt)//后加入的
{
lastt=time[cur];
ans=val[cur];
}
printf("%d\n",ans);
}
else
{
int x,y;
scanf("%d%d",&x,&y);
val[x]=y;
time[x]=cnt++;
}
} }
return 0;
}

最新文章

  1. Linux服务开机自启动设置
  2. 想调试,装了个Zend Server
  3. 利用Hadoop实现超大矩阵相乘之我见(二)
  4. Json.Net使用JSON Schema验证JSON格式
  5. zend studio 10 字体,颜色,快捷键等相关设置
  6. NSString常用方法
  7. sqlserver 经典入门基础书籍
  8. 北漂面试经历(一(两)年工作经验)-- Java基础部分
  9. python 循环语句 函数 模块
  10. lamp源码安装
  11. java设计模式--单例
  12. membership DB生成 &amp; dll 强命名 &amp; 证书生成
  13. 014-通过JDB调试,通过HSDB来查看HotSpot VM的运行时数据
  14. mysql 5.7.10 下互为主备配置
  15. linux--GCC用法
  16. HDU 4611 Balls Rearrangement 数学
  17. 复习原生ajax
  18. Android开发工具
  19. call and apply
  20. 错误处理(Operation Result)方法

热门文章

  1. CCNP路由实验之十五 NAT(网络地址转换)
  2. POJ--2516--Minimum Cost【最小费用最大流】
  3. java byte中存大于0x7E的十六进制数
  4. 如何创建Hiren的BootCD USB磁盘 -- 制作U盘启动盘
  5. js---26组合模式
  6. Date类的用法
  7. sql server存储过程调用C#编写的DLL文件
  8. Android 多线程断点续传同时下载多个大文件
  9. javafx spring
  10. golang sync.Mutex(2)