結果
| 問題 |
No.30 たこやき工場
|
| コンテスト | |
| ユーザー |
mizunomidori
|
| 提出日時 | 2016-07-02 02:05:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,268 bytes |
| コンパイル時間 | 746 ms |
| コンパイル使用メモリ | 80,276 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-21 05:25:11 |
| 合計ジャッジ時間 | 1,525 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <ctime>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
#include <numeric>
#include <string>
#define N_MAX 100
#define M_MAX 1500
using namespace std;
typedef pair<int, long long> P;
int N, M;
vector<P> g[N_MAX + 1];
long long dp[N_MAX + 1][N_MAX]; // dp[i][j]は製品番号iを1個製造するために購入が必要な製品番号jの個数.
bool used[N_MAX + 1];
void set_dp(int x)
{
if (used[x]) {
return;
}
used[x] = true;
if (g[x].size() == 0) {
for (int i = 1; i < N; i++) {
dp[x][i] = i == x;
}
return;
}
for (int i = 0; i < g[x].size(); i++) {
int y, need;
tie(y, need) = g[x][i];
set_dp(y);
for (int j = 1; j < N; j++) {
dp[x][j] += need * dp[y][j];
}
}
}
int main(void)
{
cin >> N >> M;
for (int i = 0; i < M; i++) {
long long p, q, r;
cin >> p >> q >> r;
g[r].push_back(P(p, q));
}
set_dp(N);
for (int i = 1; i < N; i++) {
printf("%lld\n", dp[N][i]);
}
return 0;
}
mizunomidori