Submission #533257

#TimeUsernameProblemLanguageResultExecution timeMemory
533257rk42745417철도 요금 (JOI16_ho_t3)C++17
100 / 100
151 ms16236 KiB
#include <bits/stdc++.h> using namespace std; #define EmiliaMyWife ios::sync_with_stdio(0); cin.tie(0); using ll = int64_t; using ull = uint64_t; using uint = uint32_t; using ld = long double; const int INF = 0x3f3f3f3f; const ll LINF = ll(4e18) + ll(2e15); const int MOD = 1e9 + 7; const double EPS = 1e-8; static int LamyIsCute = []() { EmiliaMyWife return 48763; }(); signed main() { int n, m, q; cin >> n >> m >> q; vector<int> dis(n + 1, INF); vector<pair<int, int>> edges(m); vector<vector<pair<int, int>>> edge(n + 1); for(int i = 0, u, v; i < m; i++) { cin >> u >> v; edge[u].push_back({v, i}); edge[v].push_back({u, i}); edges[i] = {u, v}; } queue<int> bfs; bfs.push(1); dis[1] = 0; while(!bfs.empty()) { int u = bfs.front(); bfs.pop(); for(const auto &[v, _] : edge[u]) if(dis[v] > dis[u] + 1) dis[v] = dis[u] + 1, bfs.push(v); } vector<int> cnt(n + 1); for(int i = 2; i <= n; i++) { for(const auto &[v, _] : edge[i]) if(dis[v] == dis[i] - 1) cnt[i]++; } vector<bool> has(n + 1), dele(m); int res = 0; while(q--) { int x; cin >> x; x--; dele[x] = true; auto [u, v] = edges[x]; if(!has[v] && !has[u] && abs(dis[u] - dis[v]) == 1) { if(dis[u] > dis[v]) swap(u, v); cnt[v]--; queue<int> que; if(cnt[v] == 0) que.push(v); while(!que.empty()) { int u = que.front(); que.pop(); has[u] = true; res++; for(const auto &[v, i] : edge[u]) { if(!dele[i] && dis[v] == dis[u] + 1) { cnt[v]--; if(cnt[v] == 0) que.push(v); } } } } cout << res << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...