Submission #94080

#TimeUsernameProblemLanguageResultExecution timeMemory
94080brcode철도 요금 (JOI16_ho_t3)C++14
100 / 100
616 ms27592 KiB
#include <iostream> #include <iomanip> #include <vector> #include <algorithm> #include <map> #include <queue> using namespace std; const long long MAXN = 200100; const long long MOD = 1e9 + 7; vector<long long> v1[MAXN]; long long fenwick[MAXN + 2]; long long arr[MAXN]; long long h[MAXN]; int query[MAXN]; vector<int> ord; long long n,m,q; vector<int> g2[MAXN]; bool ok[MAXN]; int actual[MAXN]; bool notok[MAXN]; long long ans; vector<pair<int,int>> edges; int dis[MAXN]; void bfs1(int s){ for(int i=1;i<=n;i++){ dis[i] = -1; } dis[s] = 0; queue<int> q1; q1.push(s); while(!q1.empty()){ int curr = q1.front(); q1.pop(); for(auto x:v1[curr]){ if(dis[x] == -1){ dis[x] = 1+dis[curr]; q1.push(x); } } } } int bfs2(int a,int b){ if(dis[a] == dis[b]){ return 0; } if(dis[a]>dis[b]){ swap(a,b); } g2[a].push_back(b); int res= 0; if(ok[a]){ queue<int> q1; q1.push(b); while(!q1.empty()){ int v = q1.front(); q1.pop(); if(ok[v]){ continue; } ok[v] = true; res++; for(auto x:g2[v]){ q1.push(x); } } } return res; } int main() { cin>>n>>m>>q; //edges.push_back(make_pair(0,0)); for(int i=0;i<m;i++){ int x,y; cin>>x>>y; x--; y--; v1[x].push_back(y); v1[y].push_back(x); edges.push_back(make_pair(x,y)); } bfs1(0); for(int i=0;i<q;i++){ cin>>query[i]; query[i]--; } for(int i=0;i<=q;i++){ notok[i] = false; } for(int i=0;i<q;i++){ ord.push_back(query[i]); notok[query[i]] = true; } for(int i=0;i<m;i++){ if(!notok[i]){ ord.push_back(i); } } int last = 0; ok[0] = true; actual[m] = 0; for(int i=m-1;i>=0;i--){ int a = edges[ord[i]].first; int b = edges[ord[i]].second; // cout<<a<<" "<<b<<endl; int tempans = bfs2(a,b); actual[i] = tempans+ last; last = actual[i]; } for(int i=0;i<q;i++){ cout<<n-1-actual[i+1]<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...