제출 #1141694

#제출 시각아이디문제언어결과실행 시간메모리
1141694nuutsnoynton철도 요금 (JOI16_ho_t3)C++17
61 / 100
2587 ms12988 KiB
#include<bits/stdc++.h> using namespace std; using ll = int; const ll M = 2e5 + 2; const ll N = 1e5 + 2; ll x[M], y[M], a[M]; int d[N], D[N]; vector < ll > adj[N]; ll used[M] = {0}; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n, m, r, i, j,x1, y1, s, ans, t; cin >> n >> m >>t; for (i = 1; i <= n ; i ++) { D[i] = 1e9; } D[1] = 0; for (i = 1; i <= m; i ++) { cin >> x[i] >> y[i]; adj[x[i]].push_back(y[i]); adj[y[i]].push_back(x[i]); } queue < ll > q; q.push(1); r = 0; while(!q.empty()) { x1 = q.front(); r ++; q.pop(); for ( ll X : adj[x1]) { if ( D[X] != 1e9) continue; D[X] = D[x1] + 1; q.push(X); } } for (i = 1; i <= n; i ++) { d[i] = D[i]; D[i] = 1e9; adj[i].clear(); } D[1] = 0; for (i = 1; i <= t; i ++) { cin >> a[i]; used[a[i]] = 1; } for (i = 1; i <=m; i ++) { if ( used[i] == 0) { if ( d[x[i]] == d[y[i]] + 1) { adj[y[i]].push_back(x[i]); } if ( d[y[i]] == d[x[i]] + 1) { adj[x[i]].push_back(y[i]); } } } q.push(1); while(!q.empty()) { x1 = q.front(); q.pop(); for ( ll X : adj[x1]) { if ( D[X] != 1e9) continue; D[X] = D[x1] + 1; q.push(X); } } s = 0; for (i = 1; i <= n; i ++) { if ( d[i] != 1e9 && d[i] == D[i]) s ++; } vector < ll > Ans; for (i = t; i >= 1; i --) { Ans.push_back(r - s); x1 = x[a[i]]; y1 = y[a[i]]; if ( d[x1] == d[y1] + 1) { adj[y1].push_back(x1); q.push(y1); } if ( d[y1] == d[x1] + 1) { adj[x1].push_back(y1); q.push(x1); } while(!q.empty()) { x1 = q.front(); q.pop(); for ( ll X : adj[x1]) { if ( D[X] == d[X]) continue; D[X] = min(D[x1] + 1, D[X]); if ( D[X] == d[X]) { s ++; q.push(X); } } } } reverse(Ans.begin(), Ans.end()); for (i = 0; i < Ans.size(); i ++) { cout << Ans[i] << "\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...