結果

提出番号 1992
提出者 eiya
言語 C++
提出日時 2018-08-04 14:51:42
問題名 (73)観光計画
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 57ms 43600KB
2 AC 100% 64ms 47824KB
3 AC 100% 32ms 30512KB
4 AC 100% 69ms 59296KB
5 AC 100% 35ms 40768KB
6 AC 100% 74ms 55904KB
7 AC 100% 94ms 56240KB
8 AC 100% 84ms 54512KB
9 AC 100% 30ms 37664KB
10 AC 100% 110ms 71056KB
11 AC 100% 41ms 39536KB
12 AC 100% 18ms 24368KB
13 AC 100% 43ms 35696KB
14 AC 100% 83ms 61616KB
15 AC 100% 75ms 52272KB
16 AC 100% 64ms 52368KB
17 AC 100% 101ms 65392KB
18 AC 100% 57ms 50544KB
19 AC 100% 20ms 30608KB
20 AC 100% 59ms 39120KB
21 AC 100% 24ms 33392KB
22 AC 100% 44ms 36128KB
23 AC 100% 41ms 36912KB
24 AC 100% 142ms 71440KB
25 AC 100% 78ms 64080KB
26 AC 100% 85ms 63712KB
27 AC 100% 28ms 28144KB
28 AC 100% 25ms 28864KB
29 AC 100% 64ms 47616KB
30 AC 100% 49ms 40544KB
31 AC 100% 126ms 70688KB
32 AC 100% 51ms 50512KB
33 AC 100% 15ms 24640KB
34 AC 100% 88ms 59600KB
35 AC 100% 16ms 23680KB
36 AC 100% 78ms 50880KB
37 AC 100% 44ms 36592KB
38 AC 100% 11ms 22256KB
39 AC 100% 99ms 64400KB
40 AC 100% 17ms 23600KB
41 AC 100% 96ms 64128KB
42 AC 100% 27ms 30864KB
43 AC 100% 121ms 73472KB
44 AC 100% 67ms 46448KB
45 AC 100% 75ms 51888KB
46 AC 100% 61ms 52736KB
47 AC 100% 98ms 63584KB
48 AC 100% 109ms 65936KB
49 AC 100% 57ms 46912KB
50 AC 100% 76ms 54160KB
51 AC 100% 20ms 28416KB
52 AC 100% 45ms 42064KB
53 AC 100% 34ms 33072KB
54 AC 100% 68ms 54976KB
55 AC 100% 22ms 26256KB
56 AC 100% 59ms 41632KB
57 AC 100% 31ms 36144KB
58 AC 100% 47ms 39680KB
59 AC 100% 28ms 34560KB
60 AC 100% 31ms 29312KB
61 AC 100% 44ms 37008KB
62 AC 100% 85ms 59248KB
63 AC 100% 88ms 48928KB
64 AC 100% 101ms 61520KB
65 AC 100% 85ms 56112KB
66 AC 100% 4ms 18320KB
67 AC 100% 64ms 44016KB
68 AC 100% 57ms 40208KB
69 AC 100% 148ms 81952KB
70 AC 100% 70ms 49040KB

ソースコード


#if 1
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <stack>
#include <array>
#include <deque>
#include <algorithm>
#include <utility>
#include <cstdint>
#include <functional>
#include <iomanip>
#include <numeric>
#include <assert.h>
#include <bitset>
#include <list>

auto& in = std::cin;
auto& out = std::cout;
#define all_range(C) std::begin(C), std::end(C)
const double PI = 3.141592653589793238462643383279502884197169399375105820974944;

int32_t N,M,K;


#include <queue>
#include <vector>
#include <functional>
#include <utility>
#include <algorithm>
#include <iterator>

using COST_T = uint64_t;
constexpr uint32_t N_MAX = 100100;
constexpr COST_T INF = 100000100000;//std::numeric_limits<double>::infinity()

#if defined(_MSC_VER) && defined(_DEBUG)
//static_assert(false, "リリースでコンパイルしないと遅いよ!!");
#endif

struct edge {
	uint32_t to;
	COST_T cost;
	edge() {}
	edge(uint32_t to_, COST_T cost_)
		:to(to_), cost(cost_) {}
};
std::vector<edge> graph[N_MAX];

//ダイクストラ
COST_T D[N_MAX];
void Dijkstra(uint32_t s)
{
	using P = std::pair<COST_T, uint32_t>;//cost pos
	std::priority_queue<P, std::vector<P>, std::greater<P>> que;
	std::fill(std::begin(D), std::end(D), INF);

	D[s] = 0;
	que.emplace(0, s);
	while (!que.empty())
	{
		auto p = que.top(); que.pop();
		const auto& nowpos = p.second;
		const auto& nowcost = p.first;
		if (D[nowpos] < nowcost) { continue; }

		//for (int32_t to = 0; to < N; ++to)
		//{
		//	auto cost = nowcost + graph[nowpos][to];
		//	if (cost < D[to]) {
		//		D[to] = cost;
		//		que.emplace(D[to], to);
		//	}
		//}

		for (const auto& e : graph[nowpos])
		{
			auto cost = nowcost + e.cost;
			if (cost < D[e.to]) {
				D[e.to] = cost;
				que.emplace(cost, e.to);
			}
		}

	}
}



int main()
{
	using std::endl;
	in.sync_with_stdio(false);
	out.sync_with_stdio(false);
	in.tie(nullptr);
	out.tie(nullptr);

	in >> N>>M>>K;

	for (int32_t i = 0; i < M; i++)
	{
		int32_t a, b, c;
		in >> a >> b >> c;

		graph[a].emplace_back(b, c);
		graph[b].emplace_back(a, c);

	}
	const COST_T INF2 = 100000;
	for (int32_t i = 0; i < K; i++)
	{
		int32_t a, c;
		in >> a >> c;

		graph[a].emplace_back(0, INF2 - c);
		graph[0].emplace_back(a, INF2 - c);
	}
	Dijkstra(0);
	int32_t res = 0;
	for (size_t i = 1; i <= N; i++)
	{
		if (D[i] <= INF2) {
			++res;
		}
	}
	out << res << endl;

	return 0;
}
#endif