Submission #1249846

#TimeUsernameProblemLanguageResultExecution timeMemory
1249846M_SH_OVoting Cities (NOI22_votingcity)C++20
30 / 100
326 ms2228 KiB
#include <bits/stdc++.h> #define ll long long #define ll1 long long #define ull unsigned long long #define dou long double #define str string #define vll vector<ll> #define vi vector<int> #define pll pair<ll, ll> #define vpll vector<pll> #define vbool vector<bool> #define vstr vector<str> #define vvll vector<vll> #define pb push_back #define pf push_front //#define endl "\n" #define fr first #define se second // #define sortcmp(a) sort(a.begin(), a.end(), cmp) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define speed ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define INF 1000000000000000000 #define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; //using namespace __gnu_pbds; mt19937 rng(time(0)); ll randll(ll l, ll r){ return uniform_int_distribution<ll>(l, r)(rng); } vector<vpll> g; int main(){ speed; ll n, m, k; cin >> n >> m >> k; g.resize(n+7); vll a(k); for(int i =0 ; i < k; i ++){ cin >> a[i]; } for(int i = 0; i < m; i ++){ ll a, b, c; cin >> a >> b >> c; g[a].pb({b, c}); } ll q; cin >> q; while(q --){ ll x; vll p(5); cin >> x; for(int i =0 ; i < 5; i ++){ cin >> p[i]; } vll p1 = p; vll d(n, INF); vector<multiset<ll>> v(n); d[x] = 0; set<pll> s; for(int i = 0; i < n; i ++){ s.insert({d[i], i}); } while(s.size()){ pll p = *s.begin(); s.erase(s.begin()); for(auto i : g[p.se]){ if(d[i.fr] > p.fr+i.se){ s.erase({d[i.fr], i.fr}); d[i.fr] = p.fr + i.se; s.insert({d[i.fr], i.fr}); v[i.fr] = v[p.se]; v[i.fr].insert(i.se); if(v[i.fr].size() == 6) v[i.fr].erase(v[i.fr].begin()); } } } ll minl = INF; for(int i : a){ if(d[i] == INF) continue; if(d[i] == 0){ minl = 0; break; } vll b; for(int j : v[i]){ b.pb(j); } reverse(b); p = p1; for(int j : b){ ll maxl = -INF, x = -1; for(int i1 = 0; i1 < 5; i1 ++){ if(p[i1] == -1) continue; if(j/10*(i1+1)-p[i1] > maxl){ maxl = j/10*(i1+1)-p[i1]; x = i1; } } if(maxl > 0){ d[i] -= maxl; p[x] = -1; } } minl = min(minl, d[i]); } if(minl != INF) cout << minl << endl; else cout << -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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...