题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费?

用数组arr1[i]记录在第i天人到齐的最小花费。arr2[i]记录第i天之后才有人开始走的最小花费。然后取arr1[i]+arr2[i+k+1]的最小值。

//#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
#include <bitset>
#include <iomanip>
using namespace std;
typedef long long lon;
const lon SZ=,INF=0x7FFFFFFFFFFFFFFFLL;
lon n,m,k,zcnt;
lon zvst[SZ],zsum,zmin[SZ],a[SZ];
lon ncnt,nvst[SZ],nsum,nmin[SZ],b[SZ];
struct nd{
lon d,from,to,cost;
nd(lon a,lon b,lon c,lon e):d(a),from(b),to(c),cost(e){}
}; bool cmpd(nd &x,nd &y)
{
return x.d<y.d;
} void init()
{
cin>>n>>m>>k;
if(m==)return;
vector<nd> vct;
for(lon i=;i<m;++i)
{
lon d,from,to,cost;
cin>>d>>from>>to>>cost;
vct.push_back(nd(d,from,to,cost));
}
sort(vct.begin(),vct.end(),cmpd);
//for(lon i=0;i<vct.size();++i)cout<<vct[i].d<<endl;
for(lon i=,j=;i<=;++i)
{
a[i]=a[i-];
vector<nd> tmp;
for(;j<vct.size();)
{
//cout<<i<<" "<<j<<" "<<vct[j].d<<endl;
if(vct[j].d==i)
{
//if(i==2)cout<<" "<<j<<" "<<tmp.size()<<endl;
tmp.push_back(vct[j]);++j;
}else break;
}
//if(tmp.size())cout<<i<<" "<<tmp.size()<<endl;
for(lon k=;k<tmp.size();++k)
{
lon d,from,to,cost;
d=tmp[k].d,from=tmp[k].from,to=tmp[k].to;
cost=tmp[k].cost;
if(from)
{
//if(i==3)cout<<"here"<<zvst[d]<<endl;
if(zvst[from]==)
{
zvst[from]=;
++zcnt;
zsum+=cost;
zmin[from]=cost;
}
else
{
if(zmin[from]>cost)
{
zsum-=zmin[from]-cost;
zmin[from]=cost;
}
}
if(zcnt==n)
{
a[d]=zsum;
}
}
}
} for(lon i=,j=vct.size()-;i>=;--i)
{
b[i]=b[i+];
vector<nd> tmp;
for(;j>=;)
{
//cout<<i<<" "<<j<<" "<<vct[j].d<<endl;
if(vct[j].d==i)
{
//if(i==2)cout<<" "<<j<<" "<<tmp.size()<<endl;
tmp.push_back(vct[j]);--j;
}else break;
}
//if(tmp.size())cout<<i<<" "<<tmp.size()<<endl;
for(lon k=;k<tmp.size();++k)
{
lon d,from,to,cost;
d=tmp[k].d,from=tmp[k].from,to=tmp[k].to;
cost=tmp[k].cost;
if(to)
{
if(nvst[to]==)
{
nvst[to]=;
++ncnt;
nsum+=cost;
nmin[to]=cost;
}
else
{
if(nmin[to]>cost)
{
nsum-=nmin[to]-cost;
nmin[to]=cost;
}
}
if(ncnt==n)
{
b[d]=nsum;
}
} }
} // for(lon i=1;i<=1000000;++i)
// {
// if(!b[i]&&b[i-1])b[i]=b[i-1];
// }
} lon work()
{
// for(lon i=1;i<30;++i)
// {
// cout<<a[i]<<" "<<b[i]<<endl;
// }
lon res=INF;
for(lon i=;i<=;++i)
{
lon dst=min(1000002LL,i+k+);
//if(a[i]||b[i])if(i<20)cout<<i<<" "<<a[i]<<" "<<b[i+k+1]<<endl;
if(a[i]!=&&b[dst]!=)
{
res=min(res,a[i]+b[dst]);
}
}
if(res==INF)return -;
else return res;
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
//for(;scanf("%d",&n)!=EOF;)
{
init();
cout<<work()<<endl;
}
return ;
}

codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)的更多相关文章

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

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

  2. Codeforces 853B Jury Meeting

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

  3. Codeforces Round #433 (Div. 2)【A、B、C、D题】

    题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...

  4. Jury Meeting CodeForces - 854D

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

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

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

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

  7. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)

    A. Fraction 题目链接:http://codeforces.com/contest/854/problem/A 题目意思:给出一个数n,求两个数a+b=n,且a/b不可约分,如果存在多组满足 ...

  8. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D

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

  9. 【codeforces】【比赛题解】#854 CF Round #433 (Div.2)

    cf一如既往挺丧 看丧题点我! [A]分数 Petya是数学迷,特别是有关于分数的数学.最近他学了所谓一个分数被叫做“真分数”当且仅当其分子小于分母,而一个分数被叫做“最简分数”当且仅当其分子分母互质 ...

随机推荐

  1. iframe嵌套

    iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了. <iframe src="demo_iframe_sandbox.htm" ...

  2. python多进程打印字符,加锁(Lock加锁)

    先看不加锁的: #coding=utf-8from multiprocessing import Process,Lockimport time def l(num):    #lock.acquir ...

  3. Linux基础命令---sort

    sort 以行为单位,对文本文件进行排,并输出排序结果.默认情况下,以每一行为一个单位,从首字符开始按照ASCII码向后逐个比较. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS ...

  4. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html> <body> <script type="t ...

  5. mysql 从数据库中获取多条记录,二维展示数据

    展示要求: 客户/日期 2017-10-16 1017-10-17 2017-10-18 客户1       客户2       数据库中数据: 解决办法: 1.新建一个实体类:客户名称.客户数据(A ...

  6. ACM题目————A Knight's Journey

    Description BackgroundThe knight is getting bored of seeing the same black and white squares again a ...

  7. phpstorm常用快捷键(自备不全)

    CTRL+N 查找类 CTRL+SHIFT+N 全局搜索文件 ,优先文件名匹配的文件 CTRL+SHIFT+ALT+N 查找php类名/变量名 ,js方法名/变量名, css 选择器 CTRL+G 定 ...

  8. 2017.11.11 B201 练习题思路及解题方法

    2017.11.11 B201 练习题思路及解题方法 题目类型及涵盖知识点 本次总共有6道题目,都属于MISC分类的题目,涵盖的知识点有 信息隐藏 暴力破解 音轨,摩斯电码 gif修改,base64原 ...

  9. bzoj 1497 最大获利 - 最小割

    新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研 ...

  10. flash,sram

    flash写入的内容不会因电源关闭而失去,读取速度慢,成本较低,一般用作程序存储器或者低速数据读取的情况. sram有最快的读写速度,但电源掉落后其内容也会失去,价格昂贵,一般用作cpu的二级缓存,内 ...