結果
問題 |
No.1254 補強への架け橋
|
ユーザー |
|
提出日時 | 2020-12-30 02:50:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 164 ms / 2,000 ms |
コード長 | 1,111 bytes |
コンパイル時間 | 2,145 ms |
コンパイル使用メモリ | 207,092 KB |
最終ジャッジ日時 | 2025-01-17 08:28:06 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 123 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0; i<(int)(n); i++) int n; vector<int> g[100000]; map<pair<int, int>, int> idx; int vis[100000]; stack<int> stk; vector<int> ret; void dfs(int v, int p = -1) { vis[v] = -1; stk.push(v); for (int w : g[v]) { if (w == p) continue; if (vis[w] == 1) continue; if (vis[w] == -1) { while (stk.top() != w) { ret.push_back(stk.top()); stk.pop(); } for (int i = ret.size() - 1; i >= 0; i--) stk.push(ret[i]); ret.push_back(w); } else { dfs(w, v); } } stk.pop(); vis[v] = 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { int a, b; cin >> a >> b; --a, --b; idx[make_pair(min(a, b), max(a, b))] = i + 1; g[a].push_back(b); g[b].push_back(a); } dfs(0); int m = ret.size(); cout << m << endl; for (int i = 0; i < m; i++) { int a = ret[i]; int b = ret[(i+1)%m]; cout << idx[make_pair(min(a, b), max(a,b))] << " "; } cout << endl; return 0; }