题面:

传送门

思路:

看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉

而且这道题只有去首都和离开首都的机场

因此考虑计算去首都的飞机的前缀最小花费,以及离开首都的飞机的最小后缀花费

都计算出来以后,对于每一个开始开会的时间t,用pre[t-1]+suf[t+k]来更新答案即可

Code:

到处都要用long long......

最后我只好ctrl+R,替换int为longlong了......

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
const ll inf=1e15;
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll n,m,K,cnta,cntb,cntva,cntvb;
ll pre[],suf[];ll suma,sumb;
bool vis[];ll minn[];
struct flight{
ll to,cost,t;
}a[],b[];
bool cmp(flight l,flight r){
return l.t<r.t;
}
bool cmp2(flight l,flight r){
return l.t>r.t;
}
int main(){
ll i,j,t1,t2,t3,t4;ll ans=inf;
n=read();m=read();K=read();
for(i=;i<=m;i++){
t1=read();t2=read();t3=read();t4=read();
if(t2!=) a[++cnta]=(flight){t2,t4,t1};
else b[++cntb]=(flight){t3,t4,t1};
}
if(cnta<n||cntb<n){
puts("-1");return ;
}
sort(a+,a+cnta+,cmp);sort(b+,b+cntb+,cmp2);
for(i=;i<=n;i++) suma+=(ll)(minn[i]=inf);
t1=;pre[]=inf;
for(i=;i<=cnta;i++){
for(j=t1+;j<a[i].t;j++) pre[j]=pre[j-];
t1=a[i].t;
if(!vis[a[i].to]) vis[a[i].to]=,cntva++;
suma-=minn[a[i].to]-min(minn[a[i].to],a[i].cost);
minn[a[i].to]=min(minn[a[i].to],a[i].cost);
if(cntva==n) pre[t1]=suma;
else pre[t1]=-;
}
memset(vis,,sizeof(vis));
for(i=;i<=n;i++) sumb+=(ll)(minn[i]=inf);
t1=;suf[t1]=inf;
for(i=;i<=cntb;i++){
for(j=t1-;j>b[i].t;j--) suf[j]=suf[j+];
t1=b[i].t;
if(!vis[b[i].to]) vis[b[i].to]=,cntvb++;
sumb-=minn[b[i].to]-min(minn[b[i].to],b[i].cost);
minn[b[i].to]=min(minn[b[i].to],b[i].cost);
// cout<<"calc "<<i<<ends<<t1<<ends<<cntvb<<ends<<sumb<<endl;
if(cntvb==n) suf[t1]=sumb;
else suf[t1]=-;
}
// for(i=1;i<=20;i++) cout<<suf[i]<<endl;
t1--;while(t1) suf[t1]=suf[t1+],t1--;
// for(i=1;i<=20;i++) cout<<suf[i]<<endl;
// for(i=1;i<=20;i++) cout<<pre[i]<<endl;
for(i=;i<=cnta;i++){
t1=a[i].t;t2=t1+K+;
if(~pre[t1]&&~suf[t2]) ans=min(ans,(ll)pre[t1]+(ll)suf[t2]);
}
if(ans>=inf) printf("-1");
else printf("%I64d\n",ans);
}

cf 853 B Jury Meeting [前缀和]的更多相关文章

  1. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(双指针模拟)

    D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard inpu ...

  2. Jury Meeting CodeForces - 854D

    Jury Meeting CodeForces - 854D 思路:暴力枚举会议开始的那一天(只需用所有向0点飞的航班的那一天+1去枚举即可),并计算所有人此情况下去0点和从0点出来的最小花费. 具体 ...

  3. Jury Meeting CodeForces - 854D (前缀和维护)

    Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...

  4. Codeforces 853B Jury Meeting (差分+前缀和)

    <题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到 ...

  5. CF F. Shovels Shop(前缀和预处理+贪心+dp)

    F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  7. 「题解」「CF853B」Jury Meeting

    目录 题目 思路 代码 题目 传送门 思路 十分巧妙的差分前缀和好题. 题目板块完结之后,我看到有很多处理此题的方法,但总感觉差分前缀和比较巧妙. 首先,通过输入我们可以将每个人能在 \(0\) 号点 ...

  8. codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)

    题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费? 用数组arr1[i]记录在第i天人到齐的最小花费.arr2[i]记录第i天之后才有人开始走的最小花费.然后取a ...

  9. cf 853 D Michael and Charging Stations [dp]

    题面: 传送门 思路: 看到题目,第一思路是贪心,但是我很快就否决掉了(其实分类贪心也可以做) 然后就想,贪心不能解决的状态缺失,是否可以用dp来解决呢? 事实证明是可以的 我们设dp[i][j]表示 ...

随机推荐

  1. DLM分布式锁的实现机制

    1.AST简介 DLM进程(LMON.LMD)之间的跨实例通信是使用高速互联上的IPC层实现的.为了传递锁资源的状态,DLM使用了异步陷阱(AST),它在操作系统处理程序例程中实现为中断.纯粹主义者可 ...

  2. Redis学习记录(三)

    1.Redis集群的搭建 1.1redis-cluster架构图 架构细节: (1)所有的redis节点批次互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail ...

  3. Android驱动开发读书笔记七

    第七章 (一)创建设备文件 1.使用cdev_init函数初始化cdec 描述设备文件需要一个cdev结构体,代码如下: struct cdev{ struct kobject kobj; struc ...

  4. win10如何修改host文件

    首先找到host文件,一般位于:C:\Windows\System32\drivers\etc 之后用记事本打开,直接修改.保存txt文件到桌面. 最后删除后缀名,再粘贴回去就可以了.

  5. STL MAP使用注意事项

    Hat’s Words A hat’s word is a word in the dictionary that is the concatenation of exactly two other ...

  6. (83)zabbix Less than 25% free in the configuration cache解决

    在zabbix server默认配置下,出现告警:Less than 25% free in the configuration cache,字面意思是:可用的配置缓存少于25%. 报错如下图: 增加 ...

  7. tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加

    tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加 大家都知道,在使用tp5的paginate获取分页数据之后,得到的是一个数据对象,但有时会碰到要对数据对象进行二次加工的情况, ...

  8. 662. Maximum Width of Binary Tree

    https://leetcode.com/problems/maximum-width-of-binary-tree/description/ /** * Definition for a binar ...

  9. FLASH、SDRAM

    1.flash: 闪存,掉电之后里面的存储数据不会丢失,在嵌入式系统中用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘).一般主要使用的FLASH有NOR flash和NA ...

  10. [BZOJ1010]玩具装箱toy(斜率优化)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...