제출 #520446

#제출 시각아이디문제언어결과실행 시간메모리
520446KoDNewspapers (CEOI21_newspapers)C++17
0 / 100
1 ms460 KiB
#include <bits/stdc++.h> using std::vector; using std::array; using std::pair; using std::tuple; vector<int> naive(const vector<vector<int>>& graph) { const int N = graph.size(); vector<int> adj(1 << N); for (int set = 0; set < (1 << N); ++set) { for (int i = 0; i < N; ++i) { if (set >> i & 1) { for (const int j : graph[i]) { adj[set] |= 1 << j; } } } } vector<vector<pair<int, int>>> transit(1 << N); for (int set = 0; set < (1 << N); ++set) { for (int i = 0; i < N; ++i) { transit[adj[set] & ~(1 << i)].emplace_back(set, i); } } vector<int> dist(1 << N, -1), last(1 << N, -1); std::queue<int> que; const auto push = [&](const int u, const int d, const int l) { if (dist[u] == -1) { dist[u] = d; last[u] = l; que.push(u); } }; push(0, 0, -1); while (!que.empty()) { const int u = que.front(); que.pop(); for (const auto& [v, i] : transit[u]) { push(v, dist[u] + 1, i); } } int set = (1 << N) - 1; if (dist[set] == -1) { return {}; } vector<int> ans; while (set != 0) { ans.push_back(last[set] + 1); set = adj[set] & ~(1 << last[set]); } } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N, M; std::cin >> N >> M; if (M != N - 1) { std::cout << "NO\n"; return 0; } vector<vector<int>> graph(N); for (int i = 0; i < M; ++i) { int a, b; std::cin >> a >> b; a -= 1, b -= 1; graph[a].push_back(b); graph[b].push_back(a); } if (N <= 20) { const auto ans = naive(graph); const int n = ans.size(); std::cout << "YES\n" << n << '\n'; for (int i = 0; i < n; ++i) { std::cout << ans[i] << " \n"[i + 1 == n]; } } else { std::cout << "YES\n"; if (N % 2 == 0) { std::cout << 2 * (N - 2) << '\n'; for (int i = 2; i < N; ++i) { std::cout << i << ' '; } for (int i = N - 1; i >= 2; --i) { std::cout << i << " \n"[i == 2]; } } else { std::cout << 2 * (N - 2) << '\n'; for (int i = 2; i < N; ++i) { std::cout << i << ' '; } for (int i = 2; i < N; ++i) { std::cout << i << " \n"[i == N - 1]; } } } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

newspapers.cpp: In function 'std::vector<int> naive(const std::vector<std::vector<int> >&)':
newspapers.cpp:10:27: warning: control reaches end of non-void function [-Wreturn-type]
   10 |     vector<int> adj(1 << N);
      |                           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...