5179: [Jsoi2011]任务调度


Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 5  Solved: 4
[Submit][Status][Discuss]

Description


一台超级计算机共有N颗CPU。现在这台超级计算机有M个任务要做,但同时还要考虑到不能让CPU过热。所幸的是这
台超级计算机已经将任务安排好了,现在要做的只是请你根据安排好的指令来模拟它的工作过程。一开始,这N颗C
PU都没有被分配任何的任务。之后,会给你以下几类指令(CPU的编号为1到N的整数,任务的编号为1到M的整数)
指令格式     作用
ADD n k w    将 k 号任务(权值为 w)分配给 n 号 CPU
DEC n k w    将 k 号任务的权值减少 w(已知 k 号任务被分配给了 n 号 CPU)
TRANS n1 n2  将分配给 n1 号 CPU 的任务全部转移给 n2 号 CPU
MIN n        输出分配给 n 号 CPU 的任务中权值最小的任务的权值
WORK n w     将分配给 n 号 CPU 的任务中权值最小的任务的权值加上 w,
如果权值最小的任务不唯一,则不更改权值,并输出一行“ ERROR”
 

Input


包含N+1行。
第1行包含三个正整数N、M、K,分别表示CPU的数目、任务数和指令数。
第2行到N+1行,每行包含一条指令。
N≤500, M≤300000, K≤300000。
保证任务的权值在 32 位有符号整型的范围内。
保证一个任务只会被分配一次(即至多被 ADD 一次)。
保证 ADD 指令、DEC 指令和 WORK 指令中的 w 是非负整数。
保证 TRANS 指令的两个参数不相同。
 

Output


若干行,其中包括MIN语句的输出和“ERROR”输出,每个输出占一行
 

Sample Input


ADD
ADD
MIN
WORK
TRANS
MIN
ADD
TRANS
MIN
DEC
MIN
DEC
WORK

Sample Output



-
ERROR

分析:


裸裸的可并堆题,用左偏树乱搞即可

 

代码:


# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
const int N = 3e5 + ;
int d[],n,m,k;
struct node{
int w,d,lc,rc,fa;
}t[N];
int merge(int x,int y)
{
if(!x)return y;
if(!y)return x;
if(t[x].w > t[y].w)swap(x,y);
t[x].rc = merge(t[x].rc,y);
t[t[x].rc].fa = x;
if(t[t[x].rc].d > t[t[x].lc].d)swap(t[x].rc,t[x].lc);
t[x].d = t[t[x].rc].d + ;
return x;
}
void erase(int x,int y,int z)
{
int u = merge(t[y].lc,t[y].rc),g = t[y].fa;
if(d[x] == y)d[x] = u;
if(t[g].lc == y)t[g].lc = u;
else if(t[g].rc == y)t[g].rc = u;
t[u].fa = g;t[y].lc = t[y].rc = t[y].fa = t[y].d = ;
t[y].w += z;
d[x] = merge(d[x],y);
}
int main()
{
scanf("%d %d %d",&n,&m,&k);char ch[];int x,y,z;
while(k--)
{
scanf("%s",ch);
if(ch[] == 'A')
{
scanf("%d %d %d",&x,&y,&z);
t[y].w = z;
d[x] = merge(d[x],y);
}
if(ch[] == 'D')
{
scanf("%d %d %d",&x,&y,&z);
erase(x,y,-z);
}
if(ch[] == 'T')
{
scanf("%d %d",&x,&y);
d[y] = merge(d[x],d[y]);
d[x] = ;
}
if(ch[] == 'M')
{
scanf("%d",&x);
printf("%d\n",t[d[x]].w);
}
if(ch[] == 'W')
{
scanf("%d %d",&x,&y);
bool flag = true;int l = t[d[x]].lc,r = t[d[x]].rc;
if(l && t[l].w == t[d[x]].w)flag = false;
if(r && t[r].w == t[d[x]].w)flag = false;
if(flag)erase(x,d[x],y);
else puts("ERROR");
}
}
}

[Bzoj5179][Jsoi2011]任务调度(左偏树)的更多相关文章

  1. BZOJ 1455 罗马游戏 ——左偏树

    [题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...

  2. 【BZOJ-1455】罗马游戏 可并堆 (左偏树)

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1355  Solved: 561[Submit][Status][Discuss] ...

  3. 【bzoj2809】[Apio2012]dispatching 左偏树

    2016-05-31  15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...

  4. zoj 2334 Monkey King/左偏树+并查集

    原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1389 大致题意:N只相互不认识的猴子(每只猴子有一个战斗力值) 两只 ...

  5. POJ3016-K-Monotonic(左偏树+DP)

    我觉得我要改一下签名了……怎么会有窝这么啰嗦的人呢? 做这题需要先学习左偏树<左偏树的特点及其应用> 然后做一下POJ3666,这题的简单版. 思路: 考虑一下维护中位数的过程原数组为A, ...

  6. POJ3666-Making the Grade(左偏树 or DP)

    左偏树 炒鸡棒的论文<左偏树的特点及其应用> 虽然题目要求比论文多了一个条件,但是……只需要求非递减就可以AC……数据好弱…… 虽然还没想明白为什么,但是应该觉得应该是这样——求非递减用大 ...

  7. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  8. 左偏树(Leftist Heap/Tree)简介及代码

    左偏树是一种常用的优先队列(堆)结构.与二叉堆相比,左偏树可以高效的实现两个堆的合并操作. 左偏树实现方便,编程复杂度低,而且有着不俗的效率表现. 它的一个常见应用就是与并查集结合使用.利用并查集确定 ...

  9. 黄源河《左偏树的应用》——数字序列(Baltic 2004)

    这道题哪里都找不到. [问题描述] 给定一个整数序列a1, a2, … , an,求一个不下降序列b1 ≤ b2 ≤ … ≤ bn,使得数列{ai}和{bi}的各项之差的绝对值之和 |a1 - b1| ...

随机推荐

  1. Summary of 2016 International Trusted Computing and Cloud Security Summit

    1)      Welcome Remarks 2)      The advancement of Cloud Computing and Tursted Computing national st ...

  2. Android(java)学习笔记158:多线程断点下载的原理(JavaSE实现)

    1. 为什么需要多线程下载?     服务器的资源有限,同时的平均地分配给每个客户端.开启的线程越多抢占的服务的资源就越多,下载的速度就越块. 2. 下载速度的限制条件? (1)你的电脑手机宽带的带宽 ...

  3. Mybatis和Spring整合&逆向工程

    Mybatis和Spring整合&逆向工程Mybatis和Spring整合mybatis整合Spring的思路目的就是将在SqlMapConfig.xml中的配置移植到Spring的appli ...

  4. 7-Java-C(小题答案)

    1:58497 2:171700 3:145 4:i + j+2 == k+1 || i + k+2 == j+1 || k + j+2 == i+1 5:s + " " + (c ...

  5. billu_b0x靶场刷题

    https://www.vulnhub.com/ 里面有很多安全环境,只要下载相关镜像,在虚拟机上面搭建运行就可以练习对应靶场了. 第一步.信息收集 nmap扫描内网开放80端口的存活主机  nmap ...

  6. magic_quotes_runtime 和 magic_quotes_sybase 的作用

    如果启用了 magic_quotes_runtime,大多数返回任何形式外部数据的函数,包括数据库和文本段将会用反斜线转义引号. 如果启用了magic_quotes_sybase,单引号会被单引号转义 ...

  7. SoapUI对于Json数据进行属性值获取与传递

    SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML ...

  8. windows10用WMware安装Linux虚拟机详细步骤

    windows10用WMware安装Linux虚拟机详细步骤   一.安装环境 windows10操作系统物理机VMware Workstation 软件(可以在网上下载)CentOS6.9镜像文件( ...

  9. upupoo(网页壁纸)自主修改一:农历

    最近在使用一款upupoo的壁纸软件,感觉还可以,主要是对其中html可设置为壁纸方面情有独钟 前几天在它的网页区发现了一个壁纸,感觉挺好: 感觉内容有点少,今天在工作空余时间就在其中加上了农历,同时 ...

  10. kvm虚拟机的克隆以及快照

    克隆(常见有3种方法) 1 直接克隆(克隆虚拟机使用自己的磁盘) virt-clone -o vm-01 -n vm-02 -f /kvm/os/vm-02.qcow2 virsh start vm- ...