提出 #46822538
ソースコード 拡げる
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
namespace Tasks;
public class E
{
public static void Main()
{
using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
Console.SetOut(sw);
Solve();
Console.Out.Flush();
}
public static void Solve()
{
var (N, A, B, C) = Scanner.Scan<int, long, long, long>();
var D = new long[N][];
for (var i = 0; i < N; i++)
{
D[i] = Scanner.ScanEnumerable<long>().ToArray();
}
var G = new List<(int, long)>[N * 2].Select(x => new List<(int, long)>()).ToArray();
for (var i = 0; i < N; i++)
{
for (var j = 0; j < N; j++)
{
G[i].Add((j, D[i][j] * A));
G[j].Add((i, D[j][i] * A));
G[i].Add((N + j, D[i][j] * B + C));
G[j].Add((N + i, D[j][i] * B + C));
G[N + i].Add((N + j, D[i][j] * B + C));
G[N + j].Add((N + i, D[j][i] * B + C));
}
}
var costs = new long[N * 2];
Array.Fill(costs, 1L << 60);
costs[0] = 0;
costs[N] = 0;
var queue = new PriorityQueue<(int U, long C), long>();
queue.Enqueue((0, 0), 0);
queue.Enqueue((N, 0), 0);
while (queue.TryDequeue(out var top, out _))
{
var (u, uc) = top;
if (costs[u] < uc) continue;
foreach (var (v, vc) in G[u])
{
var nc = costs[u] + vc;
if (costs[v] <= nc) continue;
costs[v] = nc;
queue.Enqueue((v, nc), nc);
}
}
var answer = Math.Min(costs[N - 1], costs[N + N - 1]);
Console.WriteLine(answer);
}
public static class Scanner
{
public static T Scan<T>() where T : IConvertible => Convert<T>(ScanStringArray()[0]);
public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
{
var input = ScanStringArray();
return (Convert<T1>(input[0]), Convert<T2>(input[1]));
}
public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
{
var input = ScanStringArray();
return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]));
}
public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
{
var input = ScanStringArray();
return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]));
}
public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
{
var input = ScanStringArray();
return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]));
}
public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
{
var input = ScanStringArray();
return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]), Convert<T6>(input[5]));
}
public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => ScanStringArray().Select(Convert<T>);
private static string[] ScanStringArray()
{
var line = Console.ReadLine()?.Trim() ?? string.Empty;
return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
}
private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
}
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
450 / 450 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample00.txt, sample01.txt, sample02.txt |
| All |
sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| sample00.txt |
AC |
61 ms |
26832 KiB |
| sample01.txt |
AC |
53 ms |
27168 KiB |
| sample02.txt |
AC |
60 ms |
27048 KiB |
| testcase00.txt |
AC |
387 ms |
171060 KiB |
| testcase01.txt |
AC |
324 ms |
151420 KiB |
| testcase02.txt |
AC |
330 ms |
151624 KiB |
| testcase03.txt |
AC |
394 ms |
175036 KiB |
| testcase04.txt |
AC |
350 ms |
156276 KiB |
| testcase05.txt |
AC |
356 ms |
162660 KiB |
| testcase06.txt |
AC |
385 ms |
171044 KiB |
| testcase07.txt |
AC |
390 ms |
171272 KiB |
| testcase08.txt |
AC |
380 ms |
168520 KiB |
| testcase09.txt |
AC |
383 ms |
166348 KiB |
| testcase10.txt |
AC |
390 ms |
167212 KiB |
| testcase11.txt |
AC |
383 ms |
174832 KiB |
| testcase12.txt |
AC |
363 ms |
159744 KiB |
| testcase13.txt |
AC |
384 ms |
162684 KiB |
| testcase14.txt |
AC |
386 ms |
160804 KiB |
| testcase15.txt |
AC |
385 ms |
174872 KiB |
| testcase16.txt |
AC |
372 ms |
166288 KiB |
| testcase17.txt |
AC |
355 ms |
155420 KiB |
| testcase18.txt |
AC |
393 ms |
161168 KiB |
| testcase19.txt |
AC |
382 ms |
175280 KiB |
| testcase20.txt |
AC |
390 ms |
168504 KiB |
| testcase21.txt |
AC |
333 ms |
145640 KiB |
| testcase22.txt |
AC |
395 ms |
160964 KiB |
| testcase23.txt |
AC |
383 ms |
168788 KiB |
| testcase24.txt |
AC |
386 ms |
168708 KiB |
| testcase25.txt |
AC |
382 ms |
159612 KiB |
| testcase26.txt |
AC |
365 ms |
158536 KiB |
| testcase27.txt |
AC |
353 ms |
156396 KiB |
| testcase28.txt |
AC |
341 ms |
153252 KiB |
| testcase29.txt |
AC |
390 ms |
166748 KiB |
| testcase30.txt |
AC |
394 ms |
161048 KiB |
| testcase31.txt |
AC |
386 ms |
174976 KiB |
| testcase32.txt |
AC |
461 ms |
170968 KiB |
| testcase33.txt |
AC |
448 ms |
166168 KiB |
| testcase34.txt |
AC |
428 ms |
162876 KiB |
| testcase35.txt |
AC |
393 ms |
175316 KiB |