제출 #171463

#제출 시각아이디문제언어결과실행 시간메모리
171463VEGAnn관광지 (IZhO14_shymbulak)C++14
0 / 100
1558 ms10104 KiB
#include <bits/stdc++.h> #define all(x) x.begin(),x.end() #define sz(x) ((int)x.size()) #define PB push_back #define MP make_pair #define ft first #define sd second #define pll pair<ll, ll> #define pii pair<int, int> using namespace std; typedef long long ll; const ll OO = 1e18; const int oo = 2e9; const int N = 200100; const int M = 1010; vector<int> g[N], vc, cyc; set<pii> st; bool in_cyc[N]; int n, ans = 0, dst[N], mx = 0, mrk[N]; void CYCLE(int lst){ cyc.clear(); int it = sz(vc) - 1; while (1){ cyc.PB(vc[it]); in_cyc[vc[it]] = 1; if (vc[it] == lst) break; it--; } } void dfs(int v, int p){ if (sz(cyc) > 0) return; vc.PB(v); mrk[v] = 1; for (int u : g[v]){ if (u == p) continue; if (mrk[u] == 0) dfs(u, v); else if (mrk[u] == 1) CYCLE(u); } mrk[v] = 2; vc.pop_back(); } int main(){ cin >> n; for (int i = 0; i < n; i++){ int x, y; cin >> x >> y; x--; y--; g[x].PB(y); g[y].PB(x); } dfs(0, -1); for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++) { dst[j] = oo; mrk[j] = 0; } dst[i] = 0; st.insert(MP(0, i)); while (sz(st)){ int v = (*st.begin()).sd; mrk[v] |= in_cyc[v]; st.erase(st.begin()); for (int u : g[v]) if (dst[u] > dst[v] + 1){ st.erase(MP(dst[u], u)); mrk[u] = mrk[v]; dst[u] = dst[v] + 1; st.insert(MP(dst[u], u)); } } for (int v = 0; v < n; v++) { if (dst[v] > mx) { mx = dst[v]; ans = 0; } if (dst[v] == mx) ans += ((sz(cyc) % 2 == 0 && mrk[v]) ? 2 : 1); } } cout << ans / 2; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...