結果
| 問題 |
No.468 役に立つ競技プログラミング実践編
|
| ユーザー |
14番
|
| 提出日時 | 2016-12-18 02:12:07 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,438 bytes |
| コンパイル時間 | 1,070 ms |
| コンパイル使用メモリ | 109,952 KB |
| 実行使用メモリ | 116,104 KB |
| 最終ジャッジ日時 | 2024-12-14 07:38:15 |
| 合計ジャッジ時間 | 34,345 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 19 WA * 2 TLE * 10 |
| other | AC * 6 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
public class Program
{
public void Proc() {
Reader.IsDebug = false;
int[] inpt = Reader.ReadLine().Split(' ').Select(a=>int.Parse(a)).ToArray();
this.MemberCount = inpt[0];
this.PathCount = inpt[1];
this.maxCost = new long[this.MemberCount];
this.minCost.Add(0,0);
for(int i=0; i<this.PathCount; i++) {
inpt = Reader.ReadLine().Split(' ').Select(a=>int.Parse(a)).ToArray();
if(!this.PathDic.ContainsKey(inpt[0])) {
this.PathDic.Add(inpt[0], new Dictionary<int, int>());
}
this.PathDic[inpt[0]].Add(inpt[1], inpt[2]);
if(!this.PathRev.ContainsKey(inpt[1])) {
this.PathRev.Add(inpt[1], new Dictionary<int, int>());
}
this.PathRev[inpt[1]].Add(inpt[0], inpt[2]);
}
Queue<int> que = new Queue<int>();
que.Enqueue(0);
while(que.Count > 0) {
int cur = que.Dequeue();
long step = this.minCost[cur];
if(cur == this.MemberCount - 1) {
continue;
}
this.PathDic[cur].ToList().ForEach(nv=>{
long nextStep = step + nv.Value;
if(minCost.ContainsKey(nv.Key) && minCost[nv.Key] >= nextStep) {
} else {
minCost[nv.Key] = nextStep;
que.Enqueue(nv.Key);
}
});
}
this.maxCost[this.MemberCount-1] = minCost[this.MemberCount-1];
que.Enqueue(this.MemberCount-1);
while(que.Count > 0) {
int cur = que.Dequeue();
long step = this.maxCost[cur];
foreach(KeyValuePair<int,int> item in this.PathRev[cur]) {
long nextStep = step-item.Value;
if(item.Key == 0) {
continue;
}
if(this.maxCost[item.Key] == 0 || maxCost[item.Key] > nextStep) {
this.maxCost[item.Key] = nextStep;
que.Enqueue(item.Key);
}
}
}
string ans = minCost[this.MemberCount-1] + " " + minCost.Count(a=>a.Value != maxCost[a.Key]) + "/" + this.MemberCount;
Console.WriteLine(ans);
}
private Dictionary<int, Dictionary<int, int>> PathDic = new Dictionary<int, Dictionary<int, int>>();
private Dictionary<int, Dictionary<int, int>> PathRev = new Dictionary<int, Dictionary<int, int>>();
private Dictionary<int, long> minCost = new Dictionary<int, long>();
private long[] maxCost;
private int MemberCount;
private int PathCount;
public class Reader {
public static bool IsDebug = true;
private static System.IO.StringReader SReader;
private static string InitText = @"
8 12
0 1 3
0 2 3
1 3 3
1 4 3
2 3 3
2 4 3
3 5 3
3 6 3
4 5 3
4 6 3
5 7 3
6 7 3
";
public static string ReadLine() {
if(IsDebug) {
if(SReader == null) {
SReader = new System.IO.StringReader(InitText.Trim());
}
return SReader.ReadLine();
} else {
return Console.ReadLine();
}
}
}
public static void Main(string[] args)
{
Program prg = new Program();
prg.Proc();
}
}
14番