Jury Meeting CodeForces - 854D

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

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

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

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
struct Flight
{
LL day,city,cost;
bool operator<(const Flight& b) const
{
return day<b.day||(day==b.day&&city<b.city)||(day==b.day&&city==b.city&&cost<b.cost);
}
}ru[],chu[];
LL num_ru,num_chu,n,m,k,maxd,ans=0x3f3f3f3f3f3f3f3f;
LL ok_ru,ok_chu;//分别表示现有能进0城市数量与0能到城市数量
LL now_ru,now_chu;//分别表示现有可用的进0航班与不可用的出0航班
LL next_chu[];//表示起飞天数在第i架航班之后的与i去同一城市的cost最小的航班编号
LL min_chu[],min_index[];//表示"现有的"去i城市的cost最小的航班cost及编号
LL now_ru1[];//now_chu1[100100];//分别表示现在i到0所用航班与0到i所用航班//now_chu1用min_index代替
LL ans_ru,ans_chu;//分别表示现在入0、出0的cost总量
int main()
{
LL i,t1,t2,t3,t4,j;
scanf("%I64d%I64d%I64d",&n,&m,&k);
for(i=;i<=m;i++)
{
scanf("%I64d%I64d%I64d%I64d",&t1,&t2,&t3,&t4);
if(t2==)
{
chu[++num_chu]=(Flight){t1,t3,t4};
}
else
{
ru[++num_ru]=(Flight){t1,t2,t4};
maxd=max(maxd,t1);
}
}
sort(chu+,chu+num_chu+);
sort(ru+,ru+num_ru+);
memset(min_chu,0x3f,sizeof(min_chu));
for(i=num_chu;i>=;i--)
{
next_chu[i]=min_index[chu[i].city];
if(min_chu[chu[i].city]>chu[i].cost)
{
min_chu[chu[i].city]=chu[i].cost;
min_index[chu[i].city]=i;
}
}
for(i=;i<=n;i++)
if(min_index[i]!=)
{
ok_chu++;
ans_chu+=chu[min_index[i]].cost;
}
if(ok_chu<n)
{
printf("-1");
return ;
}
now_chu=;
for(j=;j<=num_ru;j++)
{
i=ru[j].day+;
while(ru[now_ru+].day<i&&now_ru+<=num_ru)//后来加上&&now_ru+1<=num_ru
{
now_ru++;
if(now_ru1[ru[now_ru].city]==)
{
now_ru1[ru[now_ru].city]=now_ru;
ans_ru+=ru[now_ru].cost;
ok_ru++;
}
else if(ru[now_ru1[ru[now_ru].city]].cost>ru[now_ru].cost)
{
ans_ru-=ru[now_ru1[ru[now_ru].city]].cost;
now_ru1[ru[now_ru].city]=now_ru;
ans_ru+=ru[now_ru].cost;
}
}
while(chu[now_chu].day<i+k&&now_chu<=num_chu)//后面加上&&now_chu<=num_chu
{
if(now_chu==min_index[chu[now_chu].city])
{
ans_chu-=chu[now_chu].cost;
if(next_chu[now_chu]==) goto aaa;
min_index[chu[now_chu].city]=next_chu[now_chu];
ans_chu+=chu[next_chu[now_chu]].cost;
}
now_chu++;
}
if(ok_ru==n&&ok_chu==n)
ans=min(ans,ans_ru+ans_chu);
}
aaa:
if(ans==0x3f3f3f3f3f3f3f3f)
printf("-1");
else
printf("%I64d",ans);
return ;
}

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. Android 打造随意层级树形控件 考验你的数据结构和设计

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...

  2. 应用require.js进行javascript模块化编程小试一例

    长久以来都渴望应用javascript的模块化编程.今日紧迫更甚,岁月蹉跎,已经不能再等了. 拜读阮一峰的有关文章已经好几遍,文章写得真好,简洁流畅,头头是道,自觉有点明白了.但经验告诉我们,一定要亲 ...

  3. Mac OS用minikube安装单节点kubernetes

    参考 https://kubernetes.io/docs/tasks/tools/install-minikube/ https://github.com/linianhui/code/blob/m ...

  4. 【转】【录教程必备】推荐几款屏幕录制工具(可录制GIF)

    我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...

  5. 常见的页面效果,相关的js代码

    1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...

  6. BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...

  7. mysql忘记root用户密码找回步骤

    修改或找回root密码步骤1.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi. 2.重新启动mys ...

  8. perl字符集处理

    本文内容适用于perl 5.8及其以上版本. perl internal form 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种u ...

  9. codeforces 696B B. Puzzles(树形dp+概率)

    题目链接: B. Puzzles time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  10. 微服务框架go-micro

    微服务框架go-micro https://www.cnblogs.com/li-peng/p/9558421.html 产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂 ...