Submission #503644

#TimeUsernameProblemLanguageResultExecution timeMemory
503644jk410철도 요금 (JOI16_ho_t3)C++17
61 / 100
2561 ms15856 KiB
#include <bits/stdc++.h> using namespace std; const int INF=1e9; struct nosun{ int u,v; }; struct edge{ int v,cost; bool operator<(const edge &tmp)const{ return cost>tmp.cost; } }; int N,M,Q; nosun Nosun[200001]; int R[200001]; bool Used[200001]; vector<int> Edge[100001]; int D[100001]; int Dist[100001]; priority_queue<edge> PQ; int Ans[200001]; void dijkstra(int t){ while (!PQ.empty()){ edge tmp=PQ.top(); PQ.pop(); if (Dist[tmp.v]<tmp.cost) continue; for (int i:Edge[tmp.v]){ if (Dist[i]>tmp.cost+1){ D[i]=t; Dist[i]=tmp.cost+1; PQ.push({i,Dist[i]}); } } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>N>>M>>Q; for (int i=1; i<=N; i++){ D[i]=Q+1; Dist[i]=INF; } for (int i=1; i<=M; i++) cin>>Nosun[i].u>>Nosun[i].v; for (int i=1; i<=Q; i++){ cin>>R[i]; Used[R[i]]=true; } for (int i =1; i<=M; i++){ if (Used[i]) continue; Edge[Nosun[i].u].push_back(Nosun[i].v); Edge[Nosun[i].v].push_back(Nosun[i].u); } Dist[1]=0; PQ.push({1,0}); dijkstra(Q+1); for (int i=Q; i; i--){ Edge[Nosun[R[i]].u].push_back(Nosun[R[i]].v); Edge[Nosun[R[i]].v].push_back(Nosun[R[i]].u); int v; if (Dist[Nosun[R[i]].u]>Dist[Nosun[R[i]].v]) v=Nosun[R[i]].v; else v=Nosun[R[i]].u; PQ.push({v,Dist[v]}); dijkstra(i); } for (int i=1; i<=N; i++){ if (D[i]==Q+1) continue; Ans[D[i]]++; } for (int i=1; i<=Q; i++){ Ans[i]+=Ans[i-1]; cout<<Ans[i]<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...