Submission #1498678


Source Code Expand

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<functional>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<numeric>
#include<limits>
#include<iterator>

#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()

using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ll, char> plc;

struct edge {
	int cost;
	int to;
};

ll n, m, k,s,g;
ll INF = 1000000000;
vector<pl> cost;
vector<edge> G[60010];
vector<ll> ds, dg;

vector<ll> dijkstra(int s) {
	priority_queue<pl, vector<pl>, greater<pl>> q;
	vector<ll> d(n,INF);
	d[s] = 0;
	q.push(pl(0, s));

	while (!q.empty()) {
		pl p = q.top(); q.pop();
		int v = p.second;
		if (d[v] < p.first)continue;
		for (int i = 0; i < G[v].size(); i++) {
			edge e = G[v][i];
			if (d[e.to] > d[v] + e.cost) {
				d[e.to] = d[v] + e.cost;
				q.push(pl(d[e.to], e.to));
			}
		}
	}
	return d;
}

ll check() {
	ll ans = INF;
	for (int i = 0; i < n; i++) {
		ll res = 0;
		for (int j = 0; j < k; j++) {
			if (cost[j].first <= ds[i] && cost[j+1].first > ds[i])
				res += cost[j].second;
			if (cost[j].first <= dg[i] && cost[j+1].first > dg[i])
				res += cost[j].second;
		}
		if (cost[k].first <= ds[i])res += cost[k].second;
		if (cost[k].first <= dg[i])res += cost[k].second;
		ans = min(ans, res);
	}
	return ans;
}

int main()
{
	cin >> n >> m >> k >> s >> g;
	cost.resize(k+1);

	for (int i = 0; i < m; i++) {
		int a, b, d;
		cin >> a >> b >> d;
		G[a].push_back({d,b});
		G[b].push_back({d,a });
	}

	for (int i = 0; i < k; i++)
		cin >> cost[i+1].first >> cost[i+1].second;
	
	ds = dijkstra(s);
	dg = dijkstra(g);
	cout << check() << endl;
	return	0; 
}

Submission Info

Submission Time
Task D - 切符分割
User jj
Language C++14 (GCC 5.4.1)
Score 140
Code Size 1850 Byte
Status AC
Exec Time 68 ms
Memory 4460 KB

Judge Result

Set Name direct small large
Score / Max Score 20 / 20 20 / 20 100 / 100
Status
AC × 5
AC × 20
AC × 7
Set Name Test Cases
direct direct/basic_case00, direct/basic_case01, direct/basic_case02, direct/basic_case03, direct/basic_case04
small small/append00, small/append01, small/append02, small/append03, small/append20, small/append21, small/append30, small/basic_case00, small/basic_case01, small/basic_case02, small/basic_case03, small/basic_case04, small/basic_case05, small/basic_case06, small/basic_case07, small/basic_case08, small/basic_case09, small/sample02, small/sample03, small/split00
large large/append10, large/append11, large/append12, large/large_case00, large/large_case01, large/large_case02, large/large_case03
Case Name Status Exec Time Memory
sample00 AC 2 ms 1664 KB
sample01 AC 2 ms 1664 KB
direct/basic_case00 AC 2 ms 1664 KB
direct/basic_case01 AC 2 ms 1664 KB
direct/basic_case02 AC 2 ms 1664 KB
direct/basic_case03 AC 2 ms 1664 KB
direct/basic_case04 AC 2 ms 1664 KB
large/append10 AC 64 ms 3712 KB
large/append11 AC 64 ms 3712 KB
large/append12 AC 64 ms 3712 KB
large/large_case00 AC 68 ms 4340 KB
large/large_case01 AC 60 ms 3996 KB
large/large_case02 AC 64 ms 4120 KB
large/large_case03 AC 67 ms 4460 KB
small/append00 AC 2 ms 1664 KB
small/append01 AC 2 ms 1664 KB
small/append02 AC 2 ms 1664 KB
small/append03 AC 2 ms 1664 KB
small/append20 AC 2 ms 1664 KB
small/append21 AC 2 ms 1664 KB
small/append30 AC 2 ms 1664 KB
small/basic_case00 AC 2 ms 1664 KB
small/basic_case01 AC 2 ms 1664 KB
small/basic_case02 AC 2 ms 1664 KB
small/basic_case03 AC 2 ms 1664 KB
small/basic_case04 AC 2 ms 1664 KB
small/basic_case05 AC 2 ms 1664 KB
small/basic_case06 AC 2 ms 1664 KB
small/basic_case07 AC 2 ms 1664 KB
small/basic_case08 AC 2 ms 1664 KB
small/basic_case09 AC 2 ms 1664 KB
small/sample02 AC 2 ms 1664 KB
small/sample03 AC 2 ms 1664 KB
small/split00 AC 2 ms 1664 KB