제출 #1340604

#제출 시각아이디문제언어결과실행 시간메모리
1340604jenterjongle45Voting Cities (NOI22_votingcity)C++20
25 / 100
105 ms8348 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
using ll = long long;
using pii = pair<int,int>;
struct A{
    int u,w,c;
    bool operator<(const A &o)const{
        return w>o.w;
    }
};
int32_t main(){
    cin.tie(0)->sync_with_stdio(0);
    int n,m,k;cin>>n>>m>>k;
    vector<int> T(k);
    vector<vector<pii>> adj(n+1);
    for(int &x:T) cin>>x;
    while (m--){
        int u,v,w;cin>>u>>v>>w;
        adj[v].push_back({u,w});
    }
    vector<vector<int>> d(n+1,vector<int> (1<<5,2e18));
    priority_queue<A> pq;
    for(int x:T){
        d[x][0]=0;
        pq.push({x,0,0});
    }
    while(!pq.empty()){
        auto [u,w,c]=pq.top();pq.pop();
        if(w!=d[u][c]) continue;
        for(auto x:adj[u]){
            auto [v,ww]=x;
            for(int i=0;i<5;i++){
                if(((1<<i)^c)&&d[v][(c)|(1<<i)]>w+(ww)-ww*(i+1)/10){
                    d[v][(c)|(1<<i)]=w+(ww)-ww*(i+1)/10;
                    pq.push({v,d[v][(c)|(1<<i)],(c)|(1<<i)});
                }
            }
            if(d[v][c]>w+ww){
                d[v][c]=w+ww;
                pq.push({v,w+ww,c});
            }
        }
    }
    int Q;cin>>Q;
    while(Q--){
        int t;cin>>t;
        vector<int> s(5);
        for(int &x:s){
            cin>>x;
        }
        int ans=2e18;
        for(int x:T){
            if(x==t){
                ans=0;
                break;
            }
            for(int i=0;i<32;i++){
                int C=0;
                for(int j=0;j<5;j++){
                    if((1<<j)&i){
                        if(s[j]==-1) goto NO;
                        C+=s[j]; 
                    }
                }
                ans=min(ans,C+d[t][i]);
                NO:;
            }
        }
        cout<<(ans==2e18?-1: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...