Jury Meeting CodeForces - 854D

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

具体:首先,将航班分为飞入0和飞出0两类。 然后,枚举会议开始的时间p。 那么,飞入0的航班只有时间<p的生效,飞出0的航班只有时间>p+k-1的生效。 显然,在p变为p+1时,最多只有各一班航班生效与失效。

(听说还能二分,但是已经打了100行了,不敢再加了。。。好累)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. typedef long long LL;
  6. struct Flight
  7. {
  8. LL day,city,cost;
  9. bool operator<(const Flight& b) const
  10. {
  11. return day<b.day||(day==b.day&&city<b.city)||(day==b.day&&city==b.city&&cost<b.cost);
  12. }
  13. }ru[],chu[];
  14. LL num_ru,num_chu,n,m,k,maxd,ans=0x3f3f3f3f3f3f3f3f;
  15. LL ok_ru,ok_chu;//分别表示现有能进0城市数量与0能到城市数量
  16. LL now_ru,now_chu;//分别表示现有可用的进0航班与不可用的出0航班
  17. LL next_chu[];//表示起飞天数在第i架航班之后的与i去同一城市的cost最小的航班编号
  18. LL min_chu[],min_index[];//表示"现有的"去i城市的cost最小的航班cost及编号
  19. LL now_ru1[];//now_chu1[100100];//分别表示现在i到0所用航班与0到i所用航班//now_chu1用min_index代替
  20. LL ans_ru,ans_chu;//分别表示现在入0、出0的cost总量
  21. int main()
  22. {
  23. LL i,t1,t2,t3,t4,j;
  24. scanf("%I64d%I64d%I64d",&n,&m,&k);
  25. for(i=;i<=m;i++)
  26. {
  27. scanf("%I64d%I64d%I64d%I64d",&t1,&t2,&t3,&t4);
  28. if(t2==)
  29. {
  30. chu[++num_chu]=(Flight){t1,t3,t4};
  31. }
  32. else
  33. {
  34. ru[++num_ru]=(Flight){t1,t2,t4};
  35. maxd=max(maxd,t1);
  36. }
  37. }
  38. sort(chu+,chu+num_chu+);
  39. sort(ru+,ru+num_ru+);
  40. memset(min_chu,0x3f,sizeof(min_chu));
  41. for(i=num_chu;i>=;i--)
  42. {
  43. next_chu[i]=min_index[chu[i].city];
  44. if(min_chu[chu[i].city]>chu[i].cost)
  45. {
  46. min_chu[chu[i].city]=chu[i].cost;
  47. min_index[chu[i].city]=i;
  48. }
  49. }
  50. for(i=;i<=n;i++)
  51. if(min_index[i]!=)
  52. {
  53. ok_chu++;
  54. ans_chu+=chu[min_index[i]].cost;
  55. }
  56. if(ok_chu<n)
  57. {
  58. printf("-1");
  59. return ;
  60. }
  61. now_chu=;
  62. for(j=;j<=num_ru;j++)
  63. {
  64. i=ru[j].day+;
  65. while(ru[now_ru+].day<i&&now_ru+<=num_ru)//后来加上&&now_ru+1<=num_ru
  66. {
  67. now_ru++;
  68. if(now_ru1[ru[now_ru].city]==)
  69. {
  70. now_ru1[ru[now_ru].city]=now_ru;
  71. ans_ru+=ru[now_ru].cost;
  72. ok_ru++;
  73. }
  74. else if(ru[now_ru1[ru[now_ru].city]].cost>ru[now_ru].cost)
  75. {
  76. ans_ru-=ru[now_ru1[ru[now_ru].city]].cost;
  77. now_ru1[ru[now_ru].city]=now_ru;
  78. ans_ru+=ru[now_ru].cost;
  79. }
  80. }
  81. while(chu[now_chu].day<i+k&&now_chu<=num_chu)//后面加上&&now_chu<=num_chu
  82. {
  83. if(now_chu==min_index[chu[now_chu].city])
  84. {
  85. ans_chu-=chu[now_chu].cost;
  86. if(next_chu[now_chu]==) goto aaa;
  87. min_index[chu[now_chu].city]=next_chu[now_chu];
  88. ans_chu+=chu[next_chu[now_chu]].cost;
  89. }
  90. now_chu++;
  91. }
  92. if(ok_ru==n&&ok_chu==n)
  93. ans=min(ans,ans_ru+ans_chu);
  94. }
  95. aaa:
  96. if(ans==0x3f3f3f3f3f3f3f3f)
  97. printf("-1");
  98. else
  99. printf("%I64d",ans);
  100. return ;
  101. }

Jury Meeting CodeForces - 854D的更多相关文章

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

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

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

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

  3. 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 ...

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

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

  5. 【Codeforces Round #433 (Div. 1) B】Jury Meeting

    [链接]h在这里写链接 [题意] 有n个人,它们都要在某一时刻开始,全都到达0位置,然后维持最少k个时间单位,然后再全都回到原来的位置; 第i个人初始的位置是i. 且一共有m班航班. 每一班航班,要么 ...

  6. Codeforces 853B Jury Meeting

    题意 从城市1-n来的评审团到城市0商讨国家大事,离开和抵达的那一天不能讨论,飞机均当天抵达,给出所有飞机起飞抵达代价情况,问能否使所有评审员聚齐连续k天并返回,并求最小代价 思路 从前向后扫一遍,求 ...

  7. codeforces round 433 D. Jury Meeting

    题目大意: 输入n,m,k,分别代表城市的数量,城市编号1~n,航班的数量以及会议必须所有人员到会一起商议的天数,然后及时输入m行航班的信息,每一行输入d,f,t,c分别表示航班到站和始发的那一天(始 ...

  8. 【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. cf 853 B Jury Meeting [前缀和]

    题面: 传送门 思路: 看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉 而且这道题只有去首都和离开首都的机场 因此考虑计算去首都的飞机的前缀最小花费,以及离开首 ...

随机推荐

  1. Arcgis Engine(ae)接口详解(7):地图(map)操作

    IMap map = null; //跟map同一层次的activeView对象,他们都是“地图”的对象,map管理地图内容,activeView管理显示内容 IActiveView activeVi ...

  2. LeetCode 112 Path Sum(路径和)(BT、DP)(*)

    翻译 给定一个二叉树root和一个和sum, 决定这个树是否存在一条从根到叶子的路径使得沿路全部节点的和等于给定的sum. 比如: 给定例如以下二叉树和sum=22. 5 / \ 4 8 / / \ ...

  3. 《从零開始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理

    原创文章,欢迎转载. 转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,尽管是大部分是能够零开销桥接,零开 ...

  4. MD5加密实现类不是Windows平台下联邦信息处理标准验证过的加密算法的一部分

    在.NET应用程序中,MD5CryptoServiceProvider实例化时,造成This implementation is not part of the Windows Platform FI ...

  5. DTD复习笔记(复习资料为菜鸟教程里的DTD教程)

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 为什么使用 DTD? 通过 DTD,您的每一个 XML 文件均可携带 ...

  6. SpringBoot启动跟踪

    程序启动入口 @SpringBootApplication public class Chapter001Application { public static void main(String[] ...

  7. POJ - 2417 Discrete Logging(Baby-Step Giant-Step)

    d. 式子B^L=N(mod P),给出B.N.P,求最小的L. s.下面解法是设的im-j,而不是im+j. 设im+j的话,貌似要求逆元什么鬼 c. /* POJ 2417,3243 baby s ...

  8. 子元素margin带动父元素拖动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SPOJ:OR(位运算&数学期望)

    Given an array of N integers A1, A2, A3…AN. If you randomly choose two indexes i ,j such that 1 ≤ i ...

  10. AutoIt: send 命令 VS ControlClick的使用

    2008年的时候第一次接触AutoIt,当时觉得局限性太多了,就不想学,觉得把Watir,Ruby搞好就行了. 最近一段时间比较闲,发现自己对GUI的自动化操完全是短板,就把AutoIt重新拾起来了. ...