제출 #1290145

#제출 시각아이디문제언어결과실행 시간메모리
1290145m.zeeshanrashidVoting Cities (NOI22_votingcity)C++20
0 / 100
1096 ms7940 KiB
#ifdef __AVX2__ #pragma GCC target "avx2" #endif #pragma GCC optimize "O3" #pragma GCC optimize "unroll-loops" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; #define int long long #define elif else if #define all(l) begin(l),end(l) #define rall(l) rbegin(l),rend(l) #define append push_back #define print(l) for(auto i:l) cout<<i<<' '; cout<<endl; #define pprint(a,b) cout<<a<<' '<<b<<endl; #define inp(l) for(auto &i:l) cin>>i; #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> #define pai make_pair #define endl "\n" #define pii pair<int,int> #define fi first #define se second #define vec vector // const int mod=998244353; const int mod1=998244353; const int mod=1e9+7; const int N=5e3+5; vec<int>vo; vec<pii>G[N]; vec<int>co(5); int n,m,k; queue<vec<int>>q; vec<vec<int>>dis; void put(int u,int bi,int di){ int mi=dis[u][bi]; for(int i=0;i<32;i++){ if((bi&i)==i) mi=min(mi,dis[u][i]); } if(di<mi){ dis[u][bi]=di; q.push({di,u,bi}); } } void qu(){ int s; cin>>s; for(int i=0;i<5;i++){ cin>>co[i]; if(co[i]<0) co[i]=1e16; } for(int i=0;i<n;i++){ for(int j=0;j<32;j++) dis[i][j]=1e17; } put(0,s,0); while(q.size()){ vec<int>a=q.front(); int di=a[0],u=a[1],bi=a[2]; q.pop(); if(di!=dis[u][bi]) continue; for(auto [v,w]:G[u]){ put(v,bi,di+w); int g=1; for(int i=0;i<5;i++){ if((bi&g)==0) put(v,bi|g,di+((w/10)*(10-i-1))+co[i]); g<<=1; } } } int ans=1e18; for(auto v:vo){ for(auto di:dis[v]) ans=min(ans,di); } // for(int i=0;i<n;i++){ // print(dis[i]) // } if(ans>1e9*n){ cout<<"-1\n"; return; } cout<<ans<<endl; } int iter=1,itera=1; void solve(){ cin>>n>>m>>k; vo.resize(k); inp(vo); for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; G[u].append({v,w}); G[v].append({u,w}); // cout<<u<<' '<<v<<' '<<w<<endl; } dis.resize(n+1,vec<int>(32,1e18)); int q; cin>>q; for(int i=0;i<q;i++) qu(); } signed main(){ // freopen("","r",stdin); // freopen("","w",stdout); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cout<<fixed<<setprecision(20); // cin>>itera; for(iter=1;iter<=itera;iter++) solve(); }
#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...