結果
| 問題 | No.3499 I Love DAG |
| コンテスト | |
| ユーザー |
aorinngo0606
|
| 提出日時 | 2026-04-19 09:00:46 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,433 bytes |
| 記録 | |
| コンパイル時間 | 1,232 ms |
| コンパイル使用メモリ | 186,348 KB |
| 実行使用メモリ | 39,104 KB |
| 平均クエリ数 | 489.63 |
| 最終ジャッジ日時 | 2026-04-19 09:01:36 |
| 合計ジャッジ時間 | 6,219 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 1 |
| other | AC * 15 TLE * 1 -- * 24 |
ソースコード
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
// 入力を受け取る
int N, M; cin >> N >> M;
vector<vector<int>> G(N); // グラフを表現する隣接リスト (終点のインデックスから、始点の番号を取り出す)
vector<int> deg(N, 0); // deg[v]:頂点 v の出次数
// for(int i = 0; i < M; ++i) {
// int a, b; cin >> a >> b;
// // 通常のグラフとは逆で、G[b] に a を入れる
// G[b].push_back(a);
// // 頂点 a の出次数を 1 増やす
// deg[a]++;
// }
for(int i = 0;i < M; ++i){
int a,b; cin >> a >> b;
a--; b--;
G[b].push_back(a);
deg[a]++;
bool f = false;
vector<int> deg_copy = deg;
queue<int> que; // 探索候補の頂点番号を入れるキュー
// 頂点 v = 0, 1, …, N-1 の順に
for(int v = 0; v < N; ++v) {
// 頂点 v の出次数が最初の時点で 0 ならば、キューに v を入れる
if(deg_copy[v] == 0) {que.push(v);}
}
vector<int> order; // トポロジカルソート順を格納するための配列
// キューに要素が残っている限り
while(que.size() > 0) {
// キューの先頭要素 v を取り出し、配列 order に挿入する
int v = que.front();
que.pop();
order.push_back(v);
// 頂点 v に隣接している頂点 v2 について、
for(auto v2 : G[v]) {
// v2 の出次数を 1 減らして、もし出次数が 0 になったらキューに v2 を入れる
deg_copy[v2]--;
if(deg_copy[v2] == 0) {que.push(v2);}
}
}
// 全ての頂点が order に含まれているかによって、答えを変える
if(order.size() != N) {
// order の要素数が N でなければ、order に含まれていない頂点があるので Yes
f = false;
G[b].pop_back();
G[a].push_back(b);
deg[a]--;
deg[b]++;
cout << 1 << endl;
}
else {
// order の要素数が N であれば、すべての頂点が order に含まれているので No
f = true;
cout << 0 << endl;
}
}
return 0;
}
aorinngo0606