Submission #1264234

#TimeUsernameProblemLanguageResultExecution timeMemory
1264234MongHwa철도 요금 (JOI16_ho_t3)C++20
100 / 100
112 ms27288 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <iostream> #include <vector> #include <queue> #include <set> using namespace std; int dist[100005]; int u[200005], v[200005], val[100005]; vector<int> stage[100005], vec[100005]; queue<int> qu; set<int> rev[100005]; void bfs() { dist[1] = 1; qu.push(1); while(!qu.empty()) { int cur = qu.front(); qu.pop(); for(int nxt : stage[cur]) if(dist[nxt] == 0 || dist[nxt] == dist[cur]+1) { if(dist[nxt] == 0) qu.push(nxt); dist[nxt] = dist[cur]+1; vec[cur].push_back(nxt); rev[nxt].insert(cur); } } } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, q; cin >> n >> m >> q; for(int i = 0; i < m; i++) { cin >> u[i] >> v[i]; stage[u[i]].push_back(v[i]); stage[v[i]].push_back(u[i]); } bfs(); int ans = 0; while(q--) { int r; cin >> r; r--; if(dist[u[r]] != dist[v[r]]) { if(dist[u[r]] > dist[v[r]]) swap(u[r], v[r]); if(rev[v[r]].find(u[r]) != rev[v[r]].end()) { rev[v[r]].erase(u[r]); if(rev[v[r]].empty()) { qu.push(v[r]); while(!qu.empty()) { ans++; int cur = qu.front(); qu.pop(); for(int nxt : vec[cur]) if(rev[nxt].find(cur) != rev[nxt].end()) { rev[nxt].erase(cur); if(rev[nxt].empty()) qu.push(nxt); } } } } } cout << ans << '\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...