結果

問題 No.17 2つの地点に泊まりたい
ユーザー plasma_eplasma_e
提出日時 2019-01-17 21:23:44
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,190 bytes
コンパイル時間 850 ms
コンパイル使用メモリ 94,768 KB
最終ジャッジ日時 2024-11-14 20:46:22
合計ジャッジ時間 1,301 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:33:44: error: 'numeric_limits' is not a member of 'std'
   33 |                         ecost[i][k] = std::numeric_limits<int>::max();
      |                                            ^~~~~~~~~~~~~~
main.cpp:33:59: error: expected primary-expression before 'int'
   33 |                         ecost[i][k] = std::numeric_limits<int>::max();
      |                                                           ^~~
main.cpp:50:33: error: 'numeric_limits' is not a member of 'std'
   50 |         std::int64_t min = std::numeric_limits<int>::max();
      |                                 ^~~~~~~~~~~~~~
main.cpp:50:48: error: expected primary-expression before 'int'
   50 |         std::int64_t min = std::numeric_limits<int>::max();
      |                                                ^~~

ソースコード

diff #

#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<set>
#include<map>

int main()
{
	int N;
	std::cin >> N;
	std::vector<std::int64_t> cost(N);
	for (auto& c : cost)
	{
		std::cin >> c;
	}
	std::vector<std::map<int, std::int64_t>> edge(N);
	int M;
	std::cin >> M;
	for (int i = 0; i < M; ++i)
	{
		int A, B;
		std::int64_t C;
		std::cin >> A >> B >> C;
		edge[A][B] = C;
		edge[B][A] = C;
	}
	std::int64_t ecost[50][50];
	for (int i = 0; i < N; ++i)
	{
		for (int k = 0; k < N; ++k)
		{
			ecost[i][k] = std::numeric_limits<int>::max();
			if (edge[i].count(k))
			{
				ecost[i][k] = edge[i][k];
			}
		}
	}
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < N; ++j)
		{
			for (int k = 0; k < N; ++k)
			{
				ecost[j][k] = std::min(ecost[j][k], ecost[j][i] + ecost[i][k]);
			}
		}
	}
	std::int64_t min = std::numeric_limits<int>::max();
	for (int i = 1; i < N - 1; ++i)
	{
		for (int k = 1; k < N - 1; ++k)
		{
			if (i == k)
			{
				continue;
			}
			min = std::min(min,
				cost[i] + cost[k] + ecost[0][i] + ecost[i][k] + ecost[k][N - 1]);
		}
	}

	std::cout << min << std::endl;
}
0