結果
問題 | No.1 道のショートカット |
ユーザー | バカらっく |
提出日時 | 2017-06-25 12:04:18 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 49 ms / 5,000 ms |
コード長 | 6,663 bytes |
コンパイル時間 | 4,047 ms |
コンパイル使用メモリ | 110,336 KB |
実行使用メモリ | 22,400 KB |
最終ジャッジ日時 | 2024-07-20 16:32:23 |
合計ジャッジ時間 | 3,885 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 37 ms
19,328 KB |
testcase_01 | AC | 36 ms
19,200 KB |
testcase_02 | AC | 35 ms
19,328 KB |
testcase_03 | AC | 36 ms
19,072 KB |
testcase_04 | AC | 36 ms
19,328 KB |
testcase_05 | AC | 36 ms
19,072 KB |
testcase_06 | AC | 36 ms
19,072 KB |
testcase_07 | AC | 38 ms
19,200 KB |
testcase_08 | AC | 44 ms
20,480 KB |
testcase_09 | AC | 43 ms
20,224 KB |
testcase_10 | AC | 43 ms
20,480 KB |
testcase_11 | AC | 45 ms
21,632 KB |
testcase_12 | AC | 46 ms
21,632 KB |
testcase_13 | AC | 45 ms
21,120 KB |
testcase_14 | AC | 38 ms
19,584 KB |
testcase_15 | AC | 35 ms
19,200 KB |
testcase_16 | AC | 42 ms
19,584 KB |
testcase_17 | AC | 36 ms
19,200 KB |
testcase_18 | AC | 37 ms
19,328 KB |
testcase_19 | AC | 39 ms
19,328 KB |
testcase_20 | AC | 43 ms
19,968 KB |
testcase_21 | AC | 42 ms
19,712 KB |
testcase_22 | AC | 38 ms
19,328 KB |
testcase_23 | AC | 46 ms
22,400 KB |
testcase_24 | AC | 45 ms
21,248 KB |
testcase_25 | AC | 42 ms
19,840 KB |
testcase_26 | AC | 43 ms
19,712 KB |
testcase_27 | AC | 49 ms
21,760 KB |
testcase_28 | AC | 37 ms
19,328 KB |
testcase_29 | AC | 46 ms
21,120 KB |
testcase_30 | AC | 44 ms
19,840 KB |
testcase_31 | AC | 44 ms
20,864 KB |
testcase_32 | AC | 44 ms
20,224 KB |
testcase_33 | AC | 43 ms
20,096 KB |
testcase_34 | AC | 45 ms
21,760 KB |
testcase_35 | AC | 42 ms
20,096 KB |
testcase_36 | AC | 43 ms
20,352 KB |
testcase_37 | AC | 44 ms
20,608 KB |
testcase_38 | AC | 38 ms
19,456 KB |
testcase_39 | AC | 42 ms
19,584 KB |
testcase_40 | AC | 41 ms
19,840 KB |
testcase_41 | AC | 42 ms
19,584 KB |
testcase_42 | AC | 36 ms
19,200 KB |
testcase_43 | AC | 35 ms
19,456 KB |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System; using System.IO; using System.Linq; using System.Collections.Generic; using System.Text; public class Program { public void Proc() { int cityCount = int.Parse(Reader.ReadLine()); int moneyAmount = int.Parse(Reader.ReadLine()); int roadCount = int.Parse(Reader.ReadLine()); int[] fromList = Reader.ReadLine().Split(' ').Select(a => int.Parse(a)-1).ToArray(); int[] toList = Reader.ReadLine().Split(' ').Select(a => int.Parse(a)-1).ToArray(); int[] moneyCostList = Reader.ReadLine().Split(' ').Select(a => int.Parse(a)).ToArray(); int[] timeCostList = Reader.ReadLine().Split(' ').Select(a => int.Parse(a)).ToArray(); for (int i = 0; i < roadCount; i++){ Road r = new Road(fromList[i], toList[i], moneyCostList[i], timeCostList[i]); if(!RoadList.ContainsKey(fromList[i])) { RoadList.Add(fromList[i], new Dictionary<int, List<Road>>()); } if(!RoadList[fromList[i]].ContainsKey(toList[i])) { RoadList[fromList[i]].Add(toList[i], new List<Road>()); } RoadList[fromList[i]][toList[i]].Add(r); /* if(!RoadList.ContainsKey(toList[i])) { RoadList.Add(toList[i], new Dictionary<int, List<Road>>()); } if(!RoadList[toList[i]].ContainsKey(fromList[i])) { RoadList[toList[i]].Add(fromList[i], new List<Road>()); } RoadList[toList[i]][fromList[i]].Add(r); */ } MapState[] map = new MapState[cityCount]; // 0 から CityCount-1 へ行く Queue<Task> q = new Queue<Task>(); q.Enqueue(new Task(0,0)); map[0] = new MapState(); map[0].MoneyTime.Add(0, 0); while(q.Count()>0) { Task t = q.Dequeue(); int time = map[t.City].MoneyTime[t.Money]; if(t.City == cityCount-1) { continue; } if(!RoadList.ContainsKey(t.City)) { continue; } foreach(int nextCity in RoadList[t.City].Keys) { if(nextCity == 0) { continue; } foreach(Road r in RoadList[t.City][nextCity]) { int nextTime = time + r.TimeCost; int nextMoney = t.Money + r.MoneyCost; if (nextMoney > moneyAmount) { continue; } if (map[nextCity] != null) { if (map[nextCity].MoneyTime.Any(a => a.Key <= nextMoney && a.Value <= nextTime)) { continue; } if (map[nextCity].MoneyTime.ContainsKey(nextMoney) && map[nextCity].MoneyTime[nextMoney] <= nextTime) { continue; } } if (map[nextCity] == null) { map[nextCity] = new MapState(); } map[nextCity].MoneyTime[nextMoney] = nextTime; q.Enqueue(new Task(nextCity, nextMoney)); } } } int ans = -1; if(map[cityCount-1] !=null) { ans = map[cityCount - 1].MoneyTime.Min(a => a.Value); } Console.WriteLine(ans); } private class Task { public int City; public int Money; public Task(int c,int m) { this.City = c; this.Money = m; } } private class MapState { public Dictionary<int, int> MoneyTime = new Dictionary<int, int>(); } private Dictionary<int, Dictionary<int, List<Road>>> RoadList = new Dictionary<int, Dictionary<int, List<Road>>>(); private class Road { public int City1; public int City2; public int MoneyCost; public int TimeCost; public Road(int city1, int city2, int money, int time) { this.City1 = city1; this.City2 = city2; this.MoneyCost = money; this.TimeCost = time; } } public class Reader { private static StringReader sr; public static bool IsDebug = false; public static string ReadLine() { if (IsDebug) { if (sr == null) { sr = new StringReader(InputText.Trim()); } return sr.ReadLine(); } else { return Console.ReadLine(); } } private static string InputText = @" 39 297 167 18 23 2 11 30 15 26 30 29 11 22 4 1 27 14 28 1 33 30 31 36 13 38 25 17 25 30 8 3 29 25 4 34 8 15 4 15 12 2 35 2 27 24 4 10 25 8 18 37 22 19 22 31 22 5 10 38 14 9 29 23 11 3 11 19 7 35 2 16 2 15 33 38 18 26 15 28 6 8 33 10 11 14 30 33 32 18 17 24 35 38 14 18 26 8 15 12 30 32 24 31 9 3 22 21 32 14 37 31 4 31 32 18 30 28 14 29 28 14 18 36 3 18 14 25 16 34 7 15 30 9 29 27 12 24 33 35 37 13 16 18 11 9 1 1 24 13 26 35 36 8 24 15 17 13 19 3 38 11 13 36 7 29 2 36 22 15 21 30 30 18 31 17 37 33 36 32 32 36 12 28 26 30 37 38 37 32 39 31 39 29 35 34 32 31 14 32 28 39 39 37 35 26 28 30 7 38 6 33 31 15 37 34 21 32 38 37 34 36 37 24 34 32 39 22 24 32 33 20 28 28 20 17 38 7 26 21 39 39 39 31 38 24 33 30 36 39 34 34 23 35 37 36 26 29 38 36 39 24 27 34 23 30 25 38 39 38 38 12 30 28 22 34 21 38 34 28 35 33 29 35 33 38 36 36 23 32 38 19 26 17 28 18 37 10 37 38 35 39 32 31 26 37 39 38 38 36 26 24 13 12 11 37 29 31 36 39 39 35 28 24 28 21 39 39 34 18 38 24 35 18 38 30 37 59 145 297 152 137 193 186 145 183 283 136 138 51 225 261 269 18 200 5 211 291 100 151 244 169 194 64 275 260 170 72 276 99 153 166 131 266 10 289 87 124 192 125 90 134 127 36 168 17 96 252 240 293 26 263 154 145 107 170 120 109 263 147 211 207 187 109 26 101 153 169 189 34 97 161 195 20 134 205 92 214 136 268 88 249 280 79 286 155 63 200 202 141 102 243 87 154 165 84 146 67 99 51 86 152 55 27 8 13 3 25 207 90 95 102 160 274 171 127 272 135 31 149 105 259 53 124 57 176 112 231 221 14 131 131 195 175 182 142 127 174 97 274 251 80 65 260 217 63 294 123 4 255 283 245 239 3 56 222 218 217 248 241 122 138 259 210 356 518 175 730 104 843 67 682 891 309 625 302 960 446 881 698 776 193 956 630 894 423 778 577 707 378 413 961 423 507 649 871 283 66 649 731 913 697 972 345 709 421 191 975 356 125 83 257 334 634 184 844 598 992 727 139 845 414 335 656 360 533 231 460 943 281 982 543 473 775 94 565 225 995 550 974 939 233 63 798 757 256 854 898 581 421 400 719 328 961 503 674 104 291 692 138 115 690 475 106 741 924 977 997 373 501 308 587 217 805 394 264 650 403 66 12 247 80 652 25 516 1 94 895 476 990 122 739 263 42 282 256 73 890 435 142 248 28 924 681 503 431 882 948 191 974 908 867 216 487 14 771 536 840 615 481 830 248 484 422 779 332 848 145 365 11 453 "; } public static void Main(string[] args) { #if DEBUG Reader.IsDebug = true; #endif Program prg = new Program(); prg.Proc(); } }