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. Makeflie自动生成依赖,自动化编译

    在netbeans里开发,有一个重要文件makefile,是用来编译所有的文件. 项目的目录结构如下,扁平的目录结构,如何实现自动化编译,写makefile呢? 第一版 基础版: CC = g++ C ...

  2. C# 递归读取XML菜单数据

    在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...

  3. leetcode_268.missing number

    给定一个数组nums,其中包含0--n中的n个数,找到数组中没有出现的那个数. 解法一:cyclic swapping algorithm class Solution { public: int m ...

  4. Mybatis(一)入门

    mybatis使用的三个部分数据查询主体 : SqlSession查询映射层 : Mapper接口数据维护层 : Bean 设计一.添加maven依赖<!-- mybatis依赖 -->& ...

  5. protobuf的Compiler卸载

    一.首先,只用remove命令是不起作用的. 二.找寻到进行make的文件夹目录,然后执行make uninstall命令. 三.通过which protoc 命令,找到protoc所在位置,rm p ...

  6. 0xc000007b——应用程序无法正常启动

    0xc000007b——应用程序无法正常启动 原因:缺少exe程序启动所需要的DLL.

  7. tensorflow note

    #!/usr/bin/python # -*- coding: UTF- -*- # @date: // : # @name: first_tf_1223 # @author:vickey-wu fr ...

  8. tab bar controller

    下面记一下怎样通过代码的方式为选项卡添加视图. 1.创建一个基于Empty Application的项目 2.创建两个新类,基类选择UIViewController,勾选With XIB for us ...

  9. Shading-jdbc源码分析-sql词法解析

    前言 前有芋艿大佬已经发过相关分析的文章,自己觉的源码总归要看一下,然后看了就要记录下来(记性很差...),所以就有了这篇文章(以后还要继续更

  10. 如何用纯 CSS 为母亲节创作一颗像素画风格的爱心

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/LmrZVX 可交互视频教 ...