美团2018年CodeM大赛-初赛B轮 B 配送

题意

题解

对于每个任务,只要从上个任务的终点出发即可。

时间、地点很少,可以算出每个地点-时间的最小花费。

以题目描述的起点终点起始结束时间建图,很暴力的跑最短路即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//--- const int inf = 2e9; int n, m, k;
struct Task {
int pos;
string tim;
bool operator < (const Task &c) const {
return tim < c.tim;
}
}task[11];
struct Edge {
int v, p;
string st, ed;
Edge(int v, int p, string st, string ed) : v(v), p(p), st(st), ed(ed) {}
};
vector<Edge> g[111];
map<string, int> dis[111]; void dij(int pos, string tim) {
rep(i, 1, k+1) dis[i].clear();
dis[pos][tim] = 0;
priority_queue<pair<int, pair<int, string> > > que;
que.push(mp(0, mp(pos, tim)));
while(!que.empty()) {
auto u = que.top(); que.pop();
int d = -u.fi;
pos = u.se.fi; tim = u.se.se;
if(d != dis[pos][tim]) continue;
for(auto i : g[pos]) {
int v = i.v, p = i.p;
int t = dis[pos][tim] + p;
if(tim < i.st && (!dis[v].count(i.ed) || dis[v][i.ed] > t)) {
dis[v][i.ed] = t;
que.push(mp(-t, mp(v, i.ed)));
}
}
}
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> n >> m >> k;
rep(i, 0, n) {
string s1, s2;
cin >> task[i].pos >> s1 >> s2;
task[i].tim = s1 + " " + s2;
}
sort(task, task+n);
rep(i, 0, m) {
int u, v, p;
string st, ed;
cin >> u >> v >> p >> st >> ed;
rep(j, 1, 8) {
string t1 = "2018.07.0" + to_string(j) + " " + st;
string t2 = "2018.07.0" + to_string(j) + " " + ed;
g[u].pb(Edge(v, p, t1, t2));
}
}
int pos = 1, ans = 0;
string tim = "2018.06.30 23:59:59.999";
rep(i, 0, n) {
dij(pos, tim);
int res = inf;
for(auto j : dis[task[i].pos]) {
if(j.fi < task[i].tim) res = min(res, j.se);
else break;
}
if(res == inf) {
ans = inf;
break;
}
ans += res;
pos = task[i].pos;
tim = task[i].tim;
}
if(ans == inf) ans = -1;
cout << ans << endl;
return 0;
}

美团2018年CodeM大赛-初赛B轮 B 配送(最短路)的更多相关文章

  1. 美团2018年CodeM大赛-初赛B轮 C题低位值

    试题链接:https://www.nowcoder.com/acm/contest/151/C 定义lowbit(x) =x&(-x),即2^(p-1) (其中p为x的二进制表示中,从右向左数 ...

  2. 美团2017年CodeM大赛-初赛B轮-黑白树

    https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...

  3. 美团2017年CodeM大赛-初赛B轮 黑白树 (树形dp)

    大意: 给定树, 初始每个点全为白色, 点$i$有权值$k_i$, 表示选择$i$后, 所有距离$i$小于$k_i$的祖先(包括i)会变为黑色, 求最少选多少个点能使所有点变为黑色. 链上情况的话, ...

  4. 美团2017年CodeM大赛-初赛A轮 C合并回文子串

    区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...

  5. 美团2018年CodeM大赛-资格赛 分数 暴力模拟

    链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...

  6. 美团2018年CodeM大赛-资格赛

    https://www.nowcoder.com/acm/contest/138#question A.下单 水题…… B.可乐 题意:求期望 代码: #include<iostream> ...

  7. 2018美团CodeM编程大赛初赛B轮 A题开关灯

    题目描述 美团的办公室一共有n层,每层有m个会议室,可以看成是一个n*m的网格图.工程师们每天的工作需要协作的地方很多,经常要到会议室开会解决各种问题.公司是提倡勤俭节约的,因此每次会议室只在使用时才 ...

  8. CodeM美团点评编程大赛初赛A轮

    因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的 ...

  9. codeM美团编程大赛初赛B轮D题

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

随机推荐

  1. maven备忘

    maven常见命令 mvn clean mvn compile mvn package mvn clean compile package mvn -Djetty.port= jetty:run mv ...

  2. mysql 索引数据结构及原理

    原文:http://www.uml.org.cn/sjjm/201107145.asp 1 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子 ...

  3. 数据库SQLITE3初识

    数据库DataBase,我们都没有接触过数据库,那么数据库是什么? 它是一个有结构的.集成的.可共享的统一管理的数据集合! 所谓有结构的,指的是数据是按一定的模型组织起来的. 简单的说,拿个箱子,用隔 ...

  4. Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动

    问题:Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动 解决:从U盘启动安装的时候,会卡住不动.搞定办法相当简单,修改syslinux/syslinuxfg文件:将defa ...

  5. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  6. REDIS与MEMCACHED的区别 8大点

    如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.2 Redis支持数据 ...

  7. guava快速入门(三)

    Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] ...

  8. ios开发 学习积累20161024~20161026

    打算转ios开发工程师的岗位 今天看了下视频,自己吭呲吭呲几下开始写UI 先把Xcode8 的界面总结下 navigator ['nævɪɡetɚ] 导航器.浏览器 symbol navigator  ...

  9. Lucene原理之概念

    概念: 数据分两种: 1.结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 2.非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等.(半结构化数据:如XML,HTML等, ...

  10. java设计模式-----6、建造者模式

    Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类 ...