题面:

传送门

思路:

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

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

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

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

Code:

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define ll long long
  6. const ll inf=1e15;
  7. using namespace std;
  8. inline ll read(){
  9. ll re=,flag=;char ch=getchar();
  10. while(ch>''||ch<''){
  11. if(ch=='-') flag=-;
  12. ch=getchar();
  13. }
  14. while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
  15. return re*flag;
  16. }
  17. ll n,m,K,cnta,cntb,cntva,cntvb;
  18. ll pre[],suf[];ll suma,sumb;
  19. bool vis[];ll minn[];
  20. struct flight{
  21. ll to,cost,t;
  22. }a[],b[];
  23. bool cmp(flight l,flight r){
  24. return l.t<r.t;
  25. }
  26. bool cmp2(flight l,flight r){
  27. return l.t>r.t;
  28. }
  29. int main(){
  30. ll i,j,t1,t2,t3,t4;ll ans=inf;
  31. n=read();m=read();K=read();
  32. for(i=;i<=m;i++){
  33. t1=read();t2=read();t3=read();t4=read();
  34. if(t2!=) a[++cnta]=(flight){t2,t4,t1};
  35. else b[++cntb]=(flight){t3,t4,t1};
  36. }
  37. if(cnta<n||cntb<n){
  38. puts("-1");return ;
  39. }
  40. sort(a+,a+cnta+,cmp);sort(b+,b+cntb+,cmp2);
  41. for(i=;i<=n;i++) suma+=(ll)(minn[i]=inf);
  42. t1=;pre[]=inf;
  43. for(i=;i<=cnta;i++){
  44. for(j=t1+;j<a[i].t;j++) pre[j]=pre[j-];
  45. t1=a[i].t;
  46. if(!vis[a[i].to]) vis[a[i].to]=,cntva++;
  47. suma-=minn[a[i].to]-min(minn[a[i].to],a[i].cost);
  48. minn[a[i].to]=min(minn[a[i].to],a[i].cost);
  49. if(cntva==n) pre[t1]=suma;
  50. else pre[t1]=-;
  51. }
  52. memset(vis,,sizeof(vis));
  53. for(i=;i<=n;i++) sumb+=(ll)(minn[i]=inf);
  54. t1=;suf[t1]=inf;
  55. for(i=;i<=cntb;i++){
  56. for(j=t1-;j>b[i].t;j--) suf[j]=suf[j+];
  57. t1=b[i].t;
  58. if(!vis[b[i].to]) vis[b[i].to]=,cntvb++;
  59. sumb-=minn[b[i].to]-min(minn[b[i].to],b[i].cost);
  60. minn[b[i].to]=min(minn[b[i].to],b[i].cost);
  61. // cout<<"calc "<<i<<ends<<t1<<ends<<cntvb<<ends<<sumb<<endl;
  62. if(cntvb==n) suf[t1]=sumb;
  63. else suf[t1]=-;
  64. }
  65. // for(i=1;i<=20;i++) cout<<suf[i]<<endl;
  66. t1--;while(t1) suf[t1]=suf[t1+],t1--;
  67. // for(i=1;i<=20;i++) cout<<suf[i]<<endl;
  68. // for(i=1;i<=20;i++) cout<<pre[i]<<endl;
  69. for(i=;i<=cnta;i++){
  70. t1=a[i].t;t2=t1+K+;
  71. if(~pre[t1]&&~suf[t2]) ans=min(ans,(ll)pre[t1]+(ll)suf[t2]);
  72. }
  73. if(ans>=inf) printf("-1");
  74. else printf("%I64d\n",ans);
  75. }

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. Airflow 调度基础

    1. Airflow Airflow是一个调度.监控工作流的平台.用于将一个工作流制定为一组任务的有向无环图(DAG),并指派到一组计算节点上,根据相互之间的依赖关系,有序执行. 2. 安装 pip安 ...

  2. 6.3安装squid

    1. Frist you need to install Development tools #yum groupinstall "Development Tools" 2. Ge ...

  3. System.Threading

    线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread ...

  4. Perl_实用报表提取语言

    Perl 语法 - 基础   perl语言的核心是正则表达式,在文本处理上非常有优势,与python类似,但语法不同,perl的语法很灵活,用多了才会觉得好用. 常用知识点总结: perl语法类似于C ...

  5. python用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误。

    response = requests.request("GET", url, headers=headers, params=querystring, verify=False) ...

  6. python2, 3环境变量配置(win10下)

    1.找到此电脑,右击点击属性 2.左边侧栏,高级系统设置 3.系统属性中点击高级 4.点击环境变量 5.可以看到 某某某用户变量和系统变量两个方框 其中,系统变量是要你在打开cmd是用管理员身份运行所 ...

  7. MongDB之各种查询操作

    接口IMongDaoFind: package com.net.test.mongdb.dao; public interface IMongDaoFind { public void findUse ...

  8. relu函数是否存在梯度消失问题以及relu函数的死亡节点问题

    relu函数是否存在梯度消失问题以及relu函数的死亡节点问题 存在,在小于的时候,激活函数梯度为零,梯度消失,神经元不更新,变成了死亡节点. 出现这个原因可能是因为学习率太大,导致w更新巨大,使得输 ...

  9. pandas知识点(处理缺失数据)

    pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据: In [14]: string_data = Series(['aardvark','artichoke',np.nan,'avocad ...

  10. Flask初学者:g对象,hook钩子函数

    Flask的g对象 作用:g可以可以看作是单词global的缩写,使用“from flask import g”导入,g对象的作用是保存一些在一次请求中多个地方的都需要用到的数据,这些数据可能在用到的 ...