제출 #1350672

#제출 시각아이디문제언어결과실행 시간메모리
1350672NewtonabcKronican (COCI16_kronican)C++20
40 / 100
706 ms436 KiB
#include<bits/stdc++.h>
using namespace std;
int c[30][30];
bool vs[30];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,k; cin>>n >>k;
    int ans=INT_MAX;
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>c[i][j];
    for(int i=0;i<(1<<n);i++){
        if(__builtin_popcount(i)!=k) continue;
        vector<int> in,out;
        int cand=0;
        for(int j=0;j<n;j++){
            if(i&(1<<j)) in.push_back(j);
            else out.push_back(j);
        }
        for(int j=0;j<n;j++) vs[j]=0;
        for(auto u:in) q.push({0,u});
        while(!q.empty()){
            auto [w,u]=q.top();
            q.pop();
            if(vs[u]) continue;
            vs[u]=true;
            cand+=w;
            for(int j=0;j<n;j++){
                if(vs[j]) continue;
                q.push({c[j][u],j});
            }
        }
        ans=min(ans,cand);
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...