Submission #1338922

#TimeUsernameProblemLanguageResultExecution timeMemory
1338922Nipphitch철도 요금 (JOI16_ho_t3)C++20
100 / 100
148 ms12976 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
const int INF=1e9+7;

int n,m,q,t[N],dp[N];
array <int,2> d[N];
vector <array <int,2>> adj[N];
priority_queue <array <int,3>> pq;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> q;
    for(int i=1;i<=m;i++){
        int u,v;
        cin >> u >> v;
        adj[u].push_back({v,i});
        adj[v].push_back({u,i});
    }
    for(int i=1;i<=m;i++) t[i]=INF;
    for(int i=1;i<=q;i++){
        int x;
        cin >> x;
        t[x]=i;
    }
    for(int i=1;i<=n;i++) d[i]={INF,1};
    pq.push({d[1][0]=0,d[1][1]=INF,1});
    while(!pq.empty()){
        auto [d_u,mn_u,u]=pq.top();
        pq.pop();
        d_u*=-1;
        //cout << u << " -> " << d_u << " , " << mn_u << "\n";
        for(auto [v,idx_v]:adj[u]){
            int d_v=d_u+1;
            int mn_v=min(mn_u,t[idx_v]);
            if(d_v<d[v][0]){
                //cout << u << " -> " << v << " = " << d_v << " , " << 
                d[v]={d_v,mn_v};
                pq.push({-d_v,mn_v,v});
            }
            else if(d_v==d[v][0] && mn_v>d[v][1]){
                d[v]={d_v,mn_v};
                pq.push({-d_v,mn_v,v});
            }
        }
    }
    for(int i=2;i<=n;i++) if(d[i][1]!=INF) dp[d[i][1]]++;
    for(int i=1;i<=q;i++){
        dp[i]+=dp[i-1];
        cout << dp[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...