結果
問題 |
No.3086 Re One Two
|
ユーザー |
|
提出日時 | 2025-09-09 09:27:41 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 79 ms / 2,000 ms |
コード長 | 1,042 bytes |
コンパイル時間 | 3,899 ms |
コンパイル使用メモリ | 281,260 KB |
実行使用メモリ | 17,152 KB |
最終ジャッジ日時 | 2025-09-09 09:27:52 |
合計ジャッジ時間 | 8,635 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N; cin >> N; vector<int> st; vector<vector<int>> G(N); vector<int> deg(N); vector<int> A(N), B(N); for (int i = 0; i < N; i++) { cin >> A[i] >> B[i]; if (A[i]) { G[i + 1].push_back(i); deg[i]++; } } for (int i = N; i--;) { if (B[i] == 1) st.push_back(i); else if (B[i] == 2) { assert(!st.empty()); int j = st.back(); G[j].push_back(i); deg[i]++; } } priority_queue<int, vector<int>, greater<int>> q; for (int i = 0; i < N; i++) if (deg[i] == 0) q.push(i); vector<int> ans(N); int id = 0; while (q.size()) { int v = q.top(); ans[id++] = v + 1; q.pop(); for (int u : G[v]) { if (--deg[u] == 0) q.push(u); } } for (int i = 0; i < N; i++) cout << ans[i] << "\n"; }