제출 #1057664

#제출 시각아이디문제언어결과실행 시간메모리
1057664makanhulia어르신 집배원 (BOI14_postmen)C++17
38 / 100
1061 ms52424 KiB
#include <bits/stdc++.h> #define nikah ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define ll long long #define pll pair<ll,ll> #define pb push_back #define fi first #define se second const ll maxn = 5e5+7, modn = 1e9+7; using namespace std; ll n,m,cur,tim; vector<pll>adj[maxn]; vector<ll>ans[maxn]; pll par[maxn]; ll par2[maxn], cnt[maxn]; bool cek[maxn]; void dfs(ll node, ll last) { for (auto [next, idx] : adj[node]) { if (par[next].se < last) par[next].fi = 0; if (cek[idx] || next == par[node].fi) continue; tim++; if (par[next].fi == 0) { par[next].fi = node; par[next].se = tim; par2[next] = idx; dfs(next, last); } else { cur++; ans[cur].pb(next); cnt[next] -= 2; cek[idx] = 1; ll x = node; // cout<<next<<" "; while (x != next) { // cout<<x<<" "; cek[par2[x]] = 1; ans[cur].pb(x); cnt[x] -= 2; x = par[x].fi; } // cout<<endl; } break; } } int main () { cin>>n>>m; for (ll i=1; i<=m; i++) { ll u,v; cin>>u>>v; adj[u].pb({v,i}); adj[v].pb({u,i}); cnt[u]++; cnt[v]++; } for (ll i=1; i<=n; i++) { while (cnt[i] > 0) { par[i].fi = -1; par[i].se = tim; dfs(i,tim); } } for (ll i=1; i<=cur; i++) { for (auto x : ans[i]) { cout<<x<<" "; } cout<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...