제출 #658892

#제출 시각아이디문제언어결과실행 시간메모리
658892JooDdae산만한 고양이 (KOI17_cat)C++17
23 / 100
408 ms88848 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int n, m; int in[300200], low[300200], cnt; vector<int> v[300200]; stack<pair<int, int>> st; vector<vector<pair<int, int>>> bcc; set<int> ns; int dfs(int u, int p){ in[u] = low[u] = ++cnt; for(auto x : v[u]) if(x != p){ if(in[u] > in[x]) st.push({u, x}); if(in[x]) low[u] = min(low[u], in[x]); else{ low[u] = min(low[u], dfs(x, u)); if(low[x] >= in[u]){ vector<pair<int, int>> b; while(st.top() != make_pair(u, x)) b.push_back(st.top()), st.pop(); b.push_back(st.top()), st.pop(); if(b.size() > 1) bcc.push_back(b); else ns.insert(b[0].first), ns.insert(b[0].second); } } } return low[u]; } int main(){ cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for(int i=1;i<=m;i++) { int a, b; cin >> a >> b; v[a].push_back(b), v[b].push_back(a); } dfs(1, 0); if(bcc.size() > 1) return cout << "0\n", 0; set<int> s; for(auto b : bcc) for(auto [x, y] : b) s.insert(x), s.insert(y); ll ans = 0; for(int i=1;i<=n;i++) if(m-(int)v[i].size() == n-2 && (bcc.empty() || (s.count(i) && !ns.count(i)))) ans += i; cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...