Submission #545447

#TimeUsernameProblemLanguageResultExecution timeMemory
545447pokmui9909철도 요금 (JOI16_ho_t3)C++17
100 / 100
198 ms26624 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define x first
#define y second
ll N, M, K;
pair<ll, ll> E[200005];
vector<pair<ll, ll>> G[200005];
ll dist[200005];
const ll INF = 1e18;
ll deg[200005];
ll chk[200005];

int main(){
    cin.tie(0) -> sync_with_stdio(false);

    cin >> N >> M >> K;
    for(int i = 1; i <= M; i++){
        cin >> E[i].x >> E[i].y;
        G[E[i].x].push_back({E[i].y, i});
        G[E[i].y].push_back({E[i].x, i});
    }
    queue<ll> Q;
    fill(dist, dist + N + 1, INF);
    Q.push(1); dist[1] = 0;
    while(!Q.empty()){
        ll u = Q.front(); Q.pop();
        for(auto i : G[u]){
            if(dist[i.x] <= dist[u] + 1) continue;
            dist[i.x] = dist[u] + 1;
            Q.push(i.x);
        }
    }
    for(int i = 1; i <= M; i++){
        if(dist[E[i].x] == dist[E[i].y]) continue;
        if(dist[E[i].x] > dist[E[i].y]) swap(E[i].x, E[i].y);
        deg[E[i].y]++;
    }
    ll r = 0;
    while(K--){
        ll t; cin >> t;
        if(!chk[t] && dist[E[t].x] != dist[E[t].y]){
            Q.push(t); chk[t] = 1;
            while(!Q.empty()){
                ll u = Q.front(); Q.pop();
                deg[E[u].y]--;
                if(deg[E[u].y] == 0){
                    r++;
                    for(auto i : G[E[u].y]){
                        if(chk[i.y] || dist[E[i.y].x] == dist[E[i.y].y]) continue;
                        chk[i.y] = 1;
                        Q.push(i.y);
                    }
                }
            }
        }
        cout << r << '\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...