結果
問題 |
No.3013 ハチマキ買い星人
|
ユーザー |
![]() |
提出日時 | 2025-01-26 01:28:30 |
言語 | C# (.NET 8.0.404) |
結果 |
AC
|
実行時間 | 1,238 ms / 2,000 ms |
コード長 | 2,014 bytes |
コンパイル時間 | 7,756 ms |
コンパイル使用メモリ | 169,320 KB |
実行使用メモリ | 225,816 KB |
最終ジャッジ日時 | 2025-01-26 01:29:11 |
合計ジャッジ時間 | 36,056 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (103 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
using System; using System.Collections.Generic; using System.Linq; class Edge { public Edge(int f, int n, int c) { From = f; Next = n; Cost = c; } public int From = 0; public int Next = 0; public int Cost = 0; } class Program { static void Main() { long N, M, P, Y; { long[] vs = Console.ReadLine().Split().Select(_ => long.Parse(_)).ToArray(); N = vs[0]; M = vs[1]; P = vs[2]; Y = vs[3]; } List<Edge>[] lists = new List<Edge>[N]; for (int i = 0; i < N; i++) lists[i] = new List<Edge>(); for (int i = 0; i < M; i++) { int[] vs = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray(); int a = vs[0] - 1; int b = vs[1] - 1; int c = vs[2]; lists[a].Add(new Edge(a, b, c)); lists[b].Add(new Edge(b, a, c)); } long[] costs = new long[N]; for (int i = 0; i < N; i++) costs[i] = long.MaxValue; PriorityQueue<int, long> pq = new PriorityQueue<int, long>(); pq.Enqueue(0, 0); while (pq.Count > 0) { pq.TryDequeue(out int cur, out long cost); if (costs[cur] < long.MaxValue) continue; costs[cur] = cost; foreach (Edge edge in lists[cur]) { long ncost = cost + edge.Cost; if (ncost >= Y) continue; int next = edge.Next; pq.Enqueue(next, ncost); } } long ans = 0; for (int i = 0; i < P; i++) { int[] vs = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray(); int a = vs[0] - 1; int c = vs[1]; if (Y - costs[a] > 0) ans = Math.Max(ans, (Y - costs[a]) / c); } Console.WriteLine(ans); } }