Submission #697586

#TimeUsernameProblemLanguageResultExecution timeMemory
697586piOOENewspapers (CEOI21_newspapers)C++17
4 / 100
1 ms596 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<vector<int>> adj(n); vector<int> fa(n); iota(fa.begin(), fa.end(), 0); auto leader = [&](int x) { while (x != fa[x]) x = fa[x] = fa[fa[x]]; return x; }; auto unite = [&](int x, int y) -> bool { x = leader(x), y = leader(y); return (x != y) && (fa[y] = x, true); }; bool yay = true; for (int i = 0; i < m; ++i) { int x, y; cin >> x >> y; x -= 1, y -= 1; adj[x].push_back(y); adj[y].push_back(x); yay &= unite(x, y); } if (yay) { vector<int> down(n), up(n), parent(n, -1); auto dfs = [&](auto self, int v) -> void { for (int to: adj[v]) { if (to != parent[v]) { parent[to] = v; self(self, to); down[v] = max(down[v], down[to] + 1); } } }; dfs(dfs, 0); auto gfs = [&](auto self, int v) -> void { vector<int> nxt(adj[v]); auto it = find(nxt.begin(), nxt.end(), parent[v]); if (it != nxt.end()) { nxt.erase(it); } int s = size(nxt); vector<int> pref(s + 1), suf(s + 1); for (int i = 0; i < s; ++i) { int to = nxt[i]; pref[i + 1] = max(pref[i], down[to] + 1); } for (int i = s - 1; i >= 0; --i) { int to = nxt[i]; suf[i] = max(suf[i + 1], down[to] + 1); up[to] = max(pref[i], suf[i + 1]) + 1; self(self, to); } }; gfs(gfs, 0); for (int i = 0; i < n && yay; ++i) { int cnt = up[i] > 1; for (int to: adj[i]) { if (to != parent[i]) { cnt += down[to] + 1 > 1; } } yay &= cnt <= 4; } } if (yay) { cout << "YES\n"; cout << "1\n1\n"; } else { cout << "NO\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...