zoukankan      html  css  js  c++  java
  • Jury Meeting CodeForces

    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[100100],chu[100100];
     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[100100];//表示起飞天数在第i架航班之后的与i去同一城市的cost最小的航班编号
     18 LL min_chu[100100],min_index[100100];//表示"现有的"去i城市的cost最小的航班cost及编号
     19 LL now_ru1[100100];//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=1;i<=m;i++)
     26     {
     27         scanf("%I64d%I64d%I64d%I64d",&t1,&t2,&t3,&t4);
     28         if(t2==0)
     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+1,chu+num_chu+1);
     39     sort(ru+1,ru+num_ru+1);
     40     memset(min_chu,0x3f,sizeof(min_chu));
     41     for(i=num_chu;i>=1;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=1;i<=n;i++)
     51         if(min_index[i]!=0)
     52         {
     53             ok_chu++;
     54             ans_chu+=chu[min_index[i]].cost;
     55         }
     56     if(ok_chu<n)
     57     {
     58         printf("-1");
     59         return 0;
     60     }
     61     now_chu=1;
     62     for(j=1;j<=num_ru;j++)
     63     {
     64         i=ru[j].day+1;
     65         while(ru[now_ru+1].day<i&&now_ru+1<=num_ru)//后来加上&&now_ru+1<=num_ru 
     66         {
     67             now_ru++;
     68             if(now_ru1[ru[now_ru].city]==0)
     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]==0)    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 0;
    101 }
  • 相关阅读:
    Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进
    Spring Boot分布式系统实践【2】框架搭建
    javascript日期比较 js日期相差天数计算
    SyntaxHighlighter_代码高亮插件
    CSS控制div自动延伸到窗口100%高度
    iphone天气插件weathericon,安装,及其解决天气不变的方法!亲测!
    Zapatec.Calendar 说明文档
    html设置多少秒跳转
    CSS命名规范
    解决firefox的button按钮文字不能垂直居中
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-854d.html
Copyright © 2011-2022 走看看