题意:几个人要去一个城市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. Keepalived 安装

    Keepalived 安装安装环境 keepalived-1.2.18.tar.gz VM虚拟机redhat6.5-x64:192.168.1.201 Xshell4 部署方案 201部署 安装步骤  ...

  2. Kintone学习

    kintone JavaScript编码指南 编码的注意地方: 文字编码 使用 utf-8

  3. mysql索引使用策略及优化

    原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 索引使用策略及优化 MySQL的优化主要分为结构优化(Schem ...

  4. 利用构造函数对canvas里面矩形与扇形的绘制进行一个封装

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

  5. Django框架----models.py(数据库操作文件)

    利用一个中间模块 帮助我们连接数据库,写SQL语句,执行SQL语句,拿到结果 models.py 一.数据的对应关系 1. 类 ---> 表 2. 对象 ---> 数据行 3. 属性 -- ...

  6. 负载均衡之-LVS

    负载均衡用的很多,这里对负载均衡做一个总结吧,总共包含下面几片博文. LVS负载均衡 keepalived负载均衡+高可用 haproxy负载均衡 nginx负载均衡 LVS负载均衡 LVS是章文嵩博 ...

  7. tf.placeholder使用说明

    tf.placeholder(dtype, shape=None, name=None) placeholder,占位符,在tensorflow中类似于函数参数,运行时必须传入值. dtype:数据类 ...

  8. C++ 项目中直接使用JsonCpp源码文件

    之前在网上看到使用JsonCpp都是以库的形式使用(编译源码为静态库或者动态库),这样引用很方便,但有时候报错调试看不到错误的地方,所以就想直接把源文件添加到项目中,方便调试 这是用到源码文件: 创建 ...

  9. libcurl开源库在Win32程序中使用下载文件显示进度条实例

    一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...

  10. Linux多线程--使用互斥量同步线程【转】

    本文转载自:http://blog.csdn.net/ljianhui/article/details/10875883 前文再续,书接上一回,在上一篇文章:Linux多线程——使用信号量同步线程中, ...