結果
| 問題 | No.30 たこやき工場 | 
| コンテスト | |
| ユーザー |  ふーらくたる | 
| 提出日時 | 2016-07-06 13:14:21 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 3 ms / 5,000 ms | 
| コード長 | 1,081 bytes | 
| コンパイル時間 | 568 ms | 
| コンパイル使用メモリ | 60,620 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-12-21 05:25:07 | 
| 合計ジャッジ時間 | 1,309 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 17 | 
コンパイルメッセージ
main.cpp: In function ‘void Solve()’:
main.cpp:36:55: warning: narrowing conversion of ‘Q[i]’ from ‘ll’ {aka ‘long long int’} to ‘int’ [-Wnarrowing]
   36 |         graph[P[i] - 1].push_back((Edge){R[i] - 1, Q[i]});
      |                                                    ~~~^
            
            ソースコード
#include <iostream>
#include <vector>
using namespace std;
struct Edge {
    int to, cost;
};
typedef long long ll;
const int kMAX_N = 110;
const int kMAX_M = 1510;
ll magnifications[kMAX_N];
int N, M;
vector<Edge> graph[kMAX_N];
int deg_minus[kMAX_N];
int P[kMAX_M], R[kMAX_M];
ll Q[kMAX_M];
// 倍率を返す
ll DFS(int node) {
    if (magnifications[node] > 0) return magnifications[node];
    if (node == N - 1) return 1;
    ll mag = 0;
    for (int i = 0; i < graph[node].size(); i++) {
        Edge e = graph[node][i];
        mag += DFS(e.to) * e.cost;
    }
    return magnifications[node] = mag;
}
void Solve() {
    for (int i = 0; i < M; i++) {
        graph[P[i] - 1].push_back((Edge){R[i] - 1, Q[i]});
        deg_minus[R[i] - 1]++;
    }
    for (int i = 0; i < N - 1; i++) {
        if (deg_minus[i] == 0) {
            cout << DFS(i) * 1 << endl;
        } else {
            cout << 0 << endl;
        }
    }
}
int main() {
    cin >> N >> M;
    for (int i = 0; i < M; i++) {
        cin >> P[i] >> Q[i] >> R[i];
    }
    Solve();
    return 0;
}
            
            
            
        