题意:几个人要去一个城市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. Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表

    问题:根据某个或某几个字典字段来排序Python列表 answer: 通过使用operator 模块的itemgetter 函数,可以非常容易的排序这样的数据结构 eg: rows = [ {'fna ...

  2. Python: str.split()和re.split()的区别

    str.split() 单一分隔符,使用str.split()即可 str.split不支持正则及多个切割符号,不感知空格的数量 re.split() 多个分隔符,复杂的分隔情况,使用re.split ...

  3. Python tricks(4) -- with statement

    简介 with是从2.5版本引入的一个语法. 这个语法本身是为了解决try..finally繁琐的释放各类资源(文件句柄, Lock等)的问题. 如果想在旧版本中使用这个功能, 直接引入future模 ...

  4. 如何发布Maven依赖到中央仓库

    平时我们都是从Maven中央仓库下载依赖,如果我们想发布我们自己写的Maven依赖到中央仓库供别人下载使用应该怎么办?这里以上传自己写的simian-maven-plugin(https://gith ...

  5. (iOS)关于键盘遮挡textfield问题

    记录一下自己经常遇到问题.使用textfield(textview).当输入框位置比较靠下时,弹出的键盘会遮挡输入框,这是就需要动态移动输入框编辑状态时self.view的位置, 自己经常用的方法有两 ...

  6. P2503 [HAOI2006]均分数据

    P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计 #include<iostream> #include<c ...

  7. CSAPP 第三章 读书笔记

    程序的机器级表示 AT&T与Intel格式的汇编代码 我们的表述是ATT(根据"AT&T"命名的, AT&T是运营贝尔实验室多年的公 司)格式的汇编代码,这 ...

  8. python字符串、列表和文件对象总结

    1.字符串是字符序列.字符串文字可以用单引号或者双引号分隔. 2.可以用内置的序列操作来处理字符串和列表:连接(+).重复(*).索引([]),切片([:])和长度(len()).可以用for循环遍历 ...

  9. BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分

    目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...

  10. JavaScript 题目

    1. ],b=a; b[]=; console.log(a+b); a=[], b=a, b=[]; console.log(a+b); 2.快速排序法 var quickSort = functio ...