Submission #1206730

#TimeUsernameProblemLanguageResultExecution timeMemory
1206730dksnfjkfnwkfwNetwork (BOI15_net)C++20
18 / 100
2095 ms17060 KiB
#include <bits/stdc++.h> using namespace std; int n; vector<pair<int, int>> edges; // các cạnh ban đầu vector<pair<int, int>> allPossible; // các cạnh có thể thêm bool is_connected_without_edge(vector<vector<int>> &G, pair<int, int> skip_edge) { vector<bool> visited(n + 1, false); queue<int> q; q.push(1); visited[1] = true; while (!q.empty()) { int u = q.front(); q.pop(); for (int v : G[u]) { if ((u == skip_edge.first && v == skip_edge.second) || (u == skip_edge.second && v == skip_edge.first)) continue; if (!visited[v]) { visited[v] = true; q.push(v); } } } for (int i = 1; i <= n; ++i) if (!visited[i]) return false; return true; } bool is_good_graph(vector<pair<int, int>> added_edges) { vector<vector<int>> G(n + 1); for (auto [u, v] : edges) { G[u].push_back(v); G[v].push_back(u); } for (auto [u, v] : added_edges) { G[u].push_back(v); G[v].push_back(u); } for (auto [u, v] : edges) { if (!is_connected_without_edge(G, {u, v})) return false; } for (auto [u, v] : added_edges) { if (!is_connected_without_edge(G, {u, v})) return false; } return true; } int main() { cin >> n; edges.resize(n - 1); set<pair<int, int>> exist; for (int i = 0; i < n - 1; ++i) { int u, v; cin >> u >> v; edges[i] = {u, v}; exist.insert({min(u, v), max(u, v)}); } // Tạo danh sách các cặp (u, v) có thể thêm for (int u = 1; u <= n; ++u) { for (int v = u + 1; v <= n; ++v) { if (exist.count({u, v}) == 0) { allPossible.push_back({u, v}); } } } // Thử k từ 0 → allPossible.size() for (int k = 1; k <= allPossible.size(); ++k) { vector<bool> mask(allPossible.size(), false); fill(mask.end() - k, mask.end(), true); do { vector<pair<int, int>> added; for (int i = 0; i < allPossible.size(); ++i) { if (mask[i]) added.push_back(allPossible[i]); } if (is_good_graph(added)) { cout << k << "\n"; for (auto [u, v] : added) { cout << u << " " << v << "\n"; } return 0; } } while (next_permutation(mask.begin(), mask.end())); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...