結果
| 問題 |
No.30 たこやき工場
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-09-02 00:12:36 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,147 bytes |
| コンパイル時間 | 745 ms |
| コンパイル使用メモリ | 119,452 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-12 04:07:01 |
| 合計ジャッジ時間 | 1,517 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
import std.algorithm, std.array, std.container, std.range, std.bitmanip;
import std.numeric, std.math, std.bigint, std.random;
import std.string, std.conv, std.stdio, std.typecons;
void main()
{
auto n = readln.chomp.to!int;
auto m = readln.chomp.to!int;
auto aij = new int[][](n, n);
foreach (_; 0..m) {
auto rd = readln.split.map!(to!int);
auto p = rd[0] - 1, q = rd[1], r = rd[2] - 1;
aij[r][p] = q;
}
foreach (j, ai; aij)
if (ai.all!("a == 0"))
ai[j] = 1;
auto memo1 = new int[][](n, n);
auto memo2 = new int[][](n, n);
auto memo3 = new bool[](n);
memo2[n - 1][n - 1] = 1;
int[] calc(int i) {
if (memo3[i]) {
return memo1[i];
} else if (aij[i][i] > 0) {
return aij[i];
} else {
auto r1 = new int[](n);
foreach (j, q; aij[i]) {
if (q > 0) {
auto r2 = calc(j.to!int);
r1[] += r2[] * q;
}
}
memo1[i] = r1;
memo2[i][] += r1[];
memo3[i] = true;
return r1;
}
}
calc(n - 1);
foreach (i; 0..n - 1) {
if (aij[i][i] > 0)
writeln(memo2[n - 1][i]);
else
writeln(0);
}
}