제출 #1179933

#제출 시각아이디문제언어결과실행 시간메모리
1179933nguyenkhangninh99Network (BOI15_net)C++20
0 / 100
34 ms70728 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define fi first #define se second const int maxn = 1e6 + 5; int low[maxn], num[maxn], compid[maxn]; int timeDfs = 0, scc = 0; vector<int> g[maxn]; set<int> adj[maxn]; stack<int> s; void dfs2(int u, int pre){ low[u] = num[u] = ++timeDfs; s.push(u); for (int v: g[u]){ if (v != pre){ if (!num[v]){ dfs2(v, u); low[u] = min(low[u], low[v]); } else low[u] = min(low[u], num[v]); } } if (low[u] == num[u]){ while(true){ int v = s.top(); s.pop(); compid[v] = u; if(v == u) break; } } } void solve (){ int n; cin >> n; for(int i = 1; i <= n - 1; i++){ int u, v; cin >> u >> v ; g[u].push_back(v); g[v].push_back(u); } dfs2(1, -1); for(int u = 1; u <= n; u++){ for (int v: g[u]){ if (compid[u] != compid[v]){ adj[compid[u]].insert(compid[v]); adj[compid[v]].insert(compid[u]); } } } int ans = 0; vector<int> v; for(int i = 1; i <= n; i++){ if(adj[i].size() == 1){ ans++; v.push_back(i); } } cout << (ans + 1) / 2 << "\n"; if(v.size() % 2 == 1) cout << 1 << " " << v.back() << "\n"; for(int i = 0; i + 1 < v.size(); i += 2){ cout << v[i] << " " << v[i + 1] << "\n"; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...