Codeforces Round #608 (Div. 2)D(贪心)
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[],b[],c[];
int u,v;
int remain[],least[];
pair<int,int>pc[];
vector<int>road[];
bool cmp(int a,int b){
return a>b;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,m,k;
cin>>n>>m>>k;
for(int i=;i<=n;++i){
cin>>a[i]>>b[i]>>c[i];
pc[i]={c[i],i};
}
for(int i=;i<=m;++i){
cin>>u>>v;
road[v].push_back(u);
}
int num=k;
int flag=;
for(int i=;i<=n;++i){
if(num>=a[i]){
num+=b[i];
}
else{
flag=;
}
}
if(flag){
cout<<-;
return ;
}
least[n]=a[n];//当前至少要有的士兵数量,否则就算以后全部招募且不派兵防守也无法攻下所有城堡
for(int i=n-;i;--i){
least[i]=least[i+]-b[i];
least[i]=max(a[i],least[i]);
}
for(int i=n;i;--i){
remain[i]=num-least[i+];//当前可以用来防守的士兵数量
num-=b[i];
}
int ans=;
sort(pc+,pc++n);
for(int i=;i<=n;++i){
road[i].push_back(i);
sort(road[i].begin(),road[i].end(),cmp);
}
for(int i=n;i;--i){
int x=pc[i].first,y=pc[i].second;
for(auto it:road[y]){
if(remain[it]>){
int flag=;
for(int j=it;j<=n;++j)
if(remain[j]==){
flag=;//如果后面有等于0的话,这里派兵防守,后面就不够攻打城堡了
break;
}
if(!flag){
ans+=x;
for(int j=it;j<=n;++j)
--remain[j];
}
break;
}
}
}
cout<<ans;
return ;
}
Codeforces Round #608 (Div. 2)D(贪心)的更多相关文章
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- Codeforces Round #608 (Div. 2) - D. Portals(贪心)
题意:你起初有一支军队,有$k$个士兵,现在有$n$座城堡,你若想占领第$i$座城堡,至少得有$a[i]$个士兵才能占领$($占领后士兵不会减少$)$,占领了第$i$座城堡后,你将得到$b[i]$个士 ...
- Codeforces Round #547 (Div. 3) F 贪心 + 离散化
https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...
- Codeforces Round #595 (Div. 3)D1D2 贪心 STL
一道用STL的贪心,正好可以用来学习使用STL库 题目大意:给出n条可以内含,相交,分离的线段,如果重叠条数超过k次则为坏点,n,k<2e5 所以我们贪心的想我们从左往右遍历,如果重合部分条数超 ...
- Codeforces Round #554 (Div. 2) D 贪心 + 记忆化搜索
https://codeforces.com/contest/1152/problem/D 题意 给你一个n代表合法括号序列的长度一半,一颗有所有合法括号序列构成的字典树上,选择最大的边集,边集的边没 ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- Codeforces Round #303 (Div. 2) D 贪心
D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- Codeforces Round #545 (Div. 2) D 贪心 + kmp
https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...
随机推荐
- C语言面试题22. 链表中倒数第k个节点
要求:输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...
- Mac使用pip命令安装selenium包报错解决方法
1.使用命令: pip install selenium 2.换成命令: python -m pip install selenium 即可成功安装
- ddctf,warm up,web题
1,打开链接,发现下图,hhhh好滑稽啊,鹅鹅鹅鹅ee 2,打开源码发现source.php.添加到路径,再次访问,发现如下代码,来,让我们审计一下. 3,发现有个hint.php,进去看一看,得到一 ...
- 添加一个layer
let testLayer = new TestLayer1();this.addChild(testLayer); let TestLayer1 = cc.Layer.extend({ ctor:f ...
- C++学习书籍评价
1.C++程序设计-现代方法 本书非常适合学习了C语言基础,想跨步到C++学习的同学,前20章都是C基础的回顾,简直不要太简单,后面的课后习题花了半个小时做完了,没怎么出错,嗯,我的C语言基础还是可以 ...
- ORA-00928: missing SELECT keyword
问题描述 ORA-00928: missing SELECT keyword 问题原因 未写表名
- Java开发新闻管理系统(前后端)+爬虫百度、新浪等新闻
ForFuture News 新闻管理系统 项目演示地址:http://www.ganquanzhong.top [注]:文档下 ...
- 阿里云MySQL安装到centos,并链接。
Last login: Wed Jan 22 11:21:17 on ttys001 wulaguixiaomianyangdeMacBook-Pro:~ xingwen$ ssh root@47.9 ...
- win 下 docker 环境配置
声明 此文只针对 win7.win10 家庭版等用户操作系统,因为这些系统无法使用 windows 的 Hyper-V 虚拟技术.只能借助于 Virtual Box 虚拟机来使用 docker. Do ...
- PLSQL Developer12注册码
product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number:226959 password: xs374ca 绝对靠谱