結果
問題 | No.1254 補強への架け橋 |
ユーザー | beet |
提出日時 | 2020-10-09 21:46:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 185 ms / 2,000 ms |
コード長 | 1,468 bytes |
コンパイル時間 | 2,130 ms |
コンパイル使用メモリ | 216,976 KB |
最終ジャッジ日時 | 2025-01-15 04:22:42 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 123 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:53:15: warning: ‘cur’ may be used uninitialized [-Wmaybe-uninitialized] 53 | while(!G[cur].empty()){ | ^ main.cpp:48:7: note: ‘cur’ was declared here 48 | int cur; | ^~~
ソースコード
#include <bits/stdc++.h> using namespace std; using Int = long long; const char newl = '\n'; template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;} template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;} template<typename T> void drop(const T &x){cout<<x<<endl;exit(0);} template<typename T=int> vector<T> read(size_t n){ vector<T> ts(n); for(size_t i=0;i<n;i++) cin>>ts[i]; return ts; } //INSERT ABOVE HERE signed main(){ cin.tie(0); ios::sync_with_stdio(0); int n; cin>>n; using P = pair<int, int>; map<P, int> idx; vector<set<int>> G(n); for(int i=0;i<n;i++){ int a,b; cin>>a>>b; a--;b--; if(!(a<b)) swap(a,b); idx[P(a,b)]=i+1; G[a].emplace(b); G[b].emplace(a); } queue<int> que; for(int i=0;i<n;i++) que.emplace(i); while(!que.empty()){ int v=que.front();que.pop(); if(G[v].size()!=1u) continue; int u=*G[v].begin(); assert(G[u].count(v)); G[v].erase(u); G[u].erase(v); que.emplace(u); } int cur; for(int i=0;i<n;i++) if(!G[i].empty()) cur=i; vector<int> es; while(!G[cur].empty()){ int nxt=*G[cur].begin(); es.emplace_back(idx[minmax({cur,nxt})]); assert(G[nxt].count(cur)); G[cur].erase(nxt); G[nxt].erase(cur); cur=nxt; } sort(es.begin(),es.end()); cout<<es.size()<<endl; for(int i=0;i<(int)es.size();i++){ if(i) cout<<' '; cout<<es[i]; } cout<<newl; return 0; }