結果
問題 | No.2888 Mamehinata |
ユーザー |
![]() |
提出日時 | 2024-09-13 21:56:46 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,576 bytes |
コンパイル時間 | 3,188 ms |
コンパイル使用メモリ | 264,512 KB |
実行使用メモリ | 61,400 KB |
最終ジャッジ日時 | 2024-09-13 21:57:07 |
合計ジャッジ時間 | 19,166 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 45 WA * 7 |
ソースコード
#include <bits/stdc++.h>using namespace std;template <class T>struct Edge {Edge() {}Edge(int to_, T cost_) : to(to_), cost(cost_) {}Edge(int from_, int to_, T cost_) : from(from_), to(to_), cost(cost_) {}Edge(int from_, int to_, T cost_, int idx_) : from(from_), to(to_), cost(cost_), idx(idx_) {}int from, to;T cost;int idx;};template <class T> using Graph = vector<vector<Edge<T>>>;using graph = Graph<long long>;using edge = Edge<long long>;#define add emplace_backstruct Dijkstra {private:graph g;int n, s;vector<long long> d;vector<edge> prev;vector<bool> visit;priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq;public:Dijkstra(graph g_, int s_) : g(g_), n(g.size()), s(s_), d(n, 1000000000000000000), prev(n), visit(n, false) {d[s] = 0LL;pq.emplace(d[s], s);while (!pq.empty()) {int v = pq.top().second;pq.pop();if (visit[v]) {continue;}visit[v] = true;for (auto e : g[v]) {int nv = e.to;long long nc = e.cost;if (d[nv] > d[v] + nc) {d[nv] = d[v] + nc;prev[nv] = e;pq.emplace(d[nv], nv);}}}}vector<long long> dists() {return d;}long long dist(int t) {return d[t];}vector<edge> route(int t) {if (s == t || d[t] == 1000000000000000000) {return {};}vector<edge> res;int cur = t;while (cur != s) {res.emplace_back(prev[cur]);cur = prev[cur].from;}reverse(res.begin(), res.end());return res;}};int main() {int n, m;cin >> n >> m;graph g(n);for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;u--;v--;g[u].add(v, 1LL);g[v].add(u, 1LL);}vector<long long> d = Dijkstra(g, 0).dists();vector<int> cnt(200010, 0);for (int i = 0; i < n; i++) {if (d[i] != 1000000000000000000) {cnt[d[i]]++;}}int even = cnt[0], odd = 0;for (int i = 1; i <= n; i++) {if (i % 2 == 0) {even += cnt[i];cout << even << endl;} else {odd += cnt[i];cout << odd << endl;}}}