Submission #1174415

#TimeUsernameProblemLanguageResultExecution timeMemory
1174415fatman87878Voting Cities (NOI22_votingcity)C++20
100 / 100
62 ms6204 KiB
#include<bits/stdc++.h> using namespace std; #define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit); #define lb(x) (x)&-(x) #define all(x) (x).begin(),(x).end() #define ll long long constexpr int maxN=5e3+5,maxMASK = 1<<5; int n,m,k,q; ll dis[maxMASK][maxN]; vector<pair<int,ll>> adj[maxN]; int main(){ IOS cin>>n>>m>>k; for(int i = 0;i<maxMASK;i++)fill(dis[i],dis[i]+n+1,1e18); priority_queue<pair<ll,pair<int,int>>,vector<pair<ll,pair<int,int>>>,greater<pair<ll,pair<int,int>>>> pq; for(int i = 0;i<k;i++){ int v;cin>>v; pq.emplace(dis[0][v] = 0,make_pair(v,0)); } for(int i = 0;i<m;i++){ int a,b,c; cin>>a>>b>>c; adj[b].emplace_back(a,c); } for(;!pq.empty();){ auto [d,p] = pq.top(); auto [u,mask] = p; pq.pop(); if(d!=dis[mask][u])continue; for(auto [v,c]:adj[u]){ if(dis[mask][v]>d+c) pq.emplace(dis[mask][v] = d+c,make_pair(v,mask)); for(int cp = 0;cp<5;cp++)if((mask>>cp&1)==0){ int nmask = mask^(1<<cp); if(dis[nmask][v]>d+c/10*(10-cp-1)) pq.emplace(dis[nmask][v] = d+c/10*(10-cp-1),make_pair(v,nmask)); } } } cin>>q; for(ll s,p[5];q--;){ cin>>s; for(int i = 0;i<5;i++)cin>>p[i]; ll ans = 1e18; for(int i = 0;i<maxMASK;i++){ ll cost = dis[i][s]; for(int j = 0;j<5;j++){ if(p[j]==-1&&(i>>j&1))cost = 1e18; if(i>>j&1)cost+=p[j]; } ans = min(ans,cost); } if(ans>=1e18)cout<<"-1\n"; else cout<<ans<<'\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...