美团2018年CodeM大赛-初赛B轮 B 配送(最短路)
美团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 配送(最短路)的更多相关文章
- 美团2018年CodeM大赛-初赛B轮 C题低位值
试题链接:https://www.nowcoder.com/acm/contest/151/C 定义lowbit(x) =x&(-x),即2^(p-1) (其中p为x的二进制表示中,从右向左数 ...
- 美团2017年CodeM大赛-初赛B轮-黑白树
https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...
- 美团2017年CodeM大赛-初赛B轮 黑白树 (树形dp)
大意: 给定树, 初始每个点全为白色, 点$i$有权值$k_i$, 表示选择$i$后, 所有距离$i$小于$k_i$的祖先(包括i)会变为黑色, 求最少选多少个点能使所有点变为黑色. 链上情况的话, ...
- 美团2017年CodeM大赛-初赛A轮 C合并回文子串
区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...
- 美团2018年CodeM大赛-资格赛 分数 暴力模拟
链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...
- 美团2018年CodeM大赛-资格赛
https://www.nowcoder.com/acm/contest/138#question A.下单 水题…… B.可乐 题意:求期望 代码: #include<iostream> ...
- 2018美团CodeM编程大赛初赛B轮 A题开关灯
题目描述 美团的办公室一共有n层,每层有m个会议室,可以看成是一个n*m的网格图.工程师们每天的工作需要协作的地方很多,经常要到会议室开会解决各种问题.公司是提倡勤俭节约的,因此每次会议室只在使用时才 ...
- CodeM美团点评编程大赛初赛A轮
因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的 ...
- codeM美团编程大赛初赛B轮D题
[编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...
随机推荐
- Elastic Kibana - Install as windows service
#1 通过windows sc 服务命令安装 sc create "Kibana661" binPath= "{path}\kibana.bat" depend ...
- JSONP数据调用
json 是一种数据格式 jsonp 是一种数据调用的方式. 什么是JSONP 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是 ...
- mysql备份 小结 (三种方式的详细解读)
备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据.那变化之后的呢?所以制定一个好的备份策略很重要 新建一个all.sqlvim all.sql在 ...
- springmvc 权限 测试版
参考博文 https://blog.csdn.net/u011277123/article/details/68940939 1.Listener加载权限信息 2.interceptor验证权限 测试 ...
- spring mongodb增删改查操作
添加数据 School @Id @GeneratedValue private long id; @Indexed(unique = true) private String name; studen ...
- Hadoop源码学习笔记(3) ——初览DataNode及学习线程
Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...
- oracle数据库字符集和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果
转载请在文章显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10036321.html 今天在plsql连接oracle时候报错提示“数据库字符集和客户 ...
- composer gitlab 搭建私包
一.建立私包git 1.执行composer init 根据提示生成composer.json 2.编辑composer.json 目录格式 { "name": "iar ...
- Java NIO文章列表(强烈推荐 转)
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffe ...
- MYSQL建表问题(转)
今天在dos下准备新建一个数据表,但一直出错,如下 后面在网上查了好久,终于找到了原因.创建 MySql 的表时,表名和字段名外面的符号 ` 不是单引号,而是英文输入法状态下的反单引号,也就是键盘左上 ...