Submission #697593

#TimeUsernameProblemLanguageResultExecution timeMemory
697593piOOENewspapers (CEOI21_newspapers)C++17
50 / 100
70 ms8244 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) { cout << "NO\n"; return 0; } auto bfs = [&](int source) { vector<int> dist(n, -1); dist[source] = 0; queue<int> q; q.push(source); while (!q.empty()) { int v = q.front(); q.pop(); for (int to : adj[v]) { if (dist[to] == -1) { dist[to] = dist[v] + 1; q.push(to); } } } return dist; }; auto tmp = bfs(0); int d1 = max_element(tmp.begin(), tmp.end()) - tmp.begin(); auto dist1 = bfs(d1); int d2 = max_element(dist1.begin(), dist1.end()) - dist1.begin(); auto dist2 = bfs(d2); int diam = dist1[d2]; for (int i = 0; i < n && yay; ++i) { int len = (dist1[i] + dist2[i] - diam) / 2; if (len >= 3) { yay = false; } } 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...