HDU 3974 Assign the task (并查集改编)
来源:互联网 发布:js中date.parse 编辑:程序博客网 时间:2024/05/17 19:57
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974
这道题目的意思是这样的:
给你一个N,说明有N个人
然后接下来N行是这些人的关系
两个数字表示后者是前者的boss
然后再给你一个M,说明下面有M种情形
遇到C,你就要输出当前C后面跟着的那个号数的经理当前在做的任务。
遇到T,例如:T 2 1,你就要把任务1给2经理,而且,他的下属都要马上更换成这个任务。
所以出现C的时候,有可能问的很后面的经理当前的任务。
处理的方法是延后标记
记下最后一次改变任务的父亲经理的任务
AC代码如下(有参考大神的,忘记是哪位了,如果有看到神似的话,请不要喷,这里道歉下):
#include <stdio.h>#include <iostream>using namespace std;const int MAX = 50010;struct NODE{int task,count;};NODE p[MAX];int parent[MAX];void init(){memset(parent,-1,sizeof(parent));}int main(){int ncases,n,u,v,m,x,task;char s[5];scanf("%d",&ncases);int ind=1;while(ncases--){scanf("%d",&n);init();int i;for(i=0;i<n-1;i++){scanf("%d%d",&u,&v);parent[u]=v;}for(i=1;i<=n;i++){p[i].task=-1;p[i].count=-1;}scanf("%d",&m);printf("Case #%d:\n",ind++);int count=0;while(m--){scanf("%s",s);if(s[0]=='T'){scanf("%d%d",&x,&task);p[x].task=task;p[x].count=++count;}else{scanf("%d",&x);task=p[x].task;int count=p[x].count;while(x!=-1){if(p[x].count>count){task=p[x].task;count=p[x].count;}x=parent[x];}printf("%d\n",task);}}}return 0;}
- HDU 3974 Assign the task (并查集改编)
- HDU 3974 Assign the task(并查集)
- HDU 3974 Assign the task(并查集)
- HDU 3974 Assign the task 并查集
- HDU 3974 Assign the task(树 并查集)
- HDU 3974 Assign the task [并查集扩展]
- 并查集--HDU 3974Assign the task--带权
- HDU 3974 Assign the task 并查集解法
- Assign the task (并查集)
- HDU 3974 Assign the task (并查集&线段树)
- Assign the task (并查集)
- hdu 3974 Assign the task
- hdu 3974 Assign the task
- hdu 3974 Assign the task
- HDU 3974 Assign the task
- HDU 3974 Assign the task
- hdu 3974 Assign the task
- hdu 3974 Assign the task
- Java内存回收机制
- ACM算法相关资料
- 怎样学习C++
- jquery解析XML字符串或XML文件的方法
- Silverlight 4.0 Accordion 解决ScrollViewer 的问题
- HDU 3974 Assign the task (并查集改编)
- Composite(组合模式)
- 数据中心十大热门技能
- HTML中定义字体[字体美化]
- delphi 获取北京时间
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- 根据wsdl文件或者wsdl地址生成对应的java代码
- C# 运算符优先级
- OpenOffice桌面环境(Desktop Environment)