# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
220916 | Ruxandra985 | Cities (BOI16_cities) | C++14 | 1620 ms | 54348 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define DIMN 100010
#define INF 1000000000000000
using namespace std;
long long dist[64][DIMN];
int sp[DIMN] , poz[DIMN];
vector <pair <int,int> > v[DIMN];
priority_queue <pair <long long , pair <int,int> > > h;
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int n , m , k , i , j , x , y , cost , nod , vecin , c , cst , mask , st;
long long sum = 0;
fscanf (fin,"%d%d%d",&n,&k,&m);
for (i = 1 ; i <= k ; i++){
fscanf (fin,"%d",&sp[i]);
poz[sp[i]] = i;
}
for (i = 1 ; i <= m ; i++){
fscanf (fin,"%d%d%d",&x,&y,&c);
v[x].push_back(make_pair(y , c));
v[y].push_back(make_pair(x , c));
}
for (i = 0 ; i < 32 ; i++){
for (j = 1 ; j <= n ; j++)
dist[i][j] = INF;
}
for (j = 1 ; j <= n ; j++){
if (poz[j]){
dist[1 << (poz[j] - 1)][j] = 0;
h.push(make_pair(0 , make_pair(1 << (poz[j] - 1) , j)));
}
else {
dist[0][j] = 0;
h.push(make_pair(0 , make_pair(0 , j)));
}
}
while (!h.empty()){
cost = -h.top().first;
mask = h.top().second.first;
nod = h.top().second.second;
h.pop();
if (dist[mask][nod] != cost)
continue; /// nu e ok
//printf ("%d %d %lld\n" , mask , nod , dist[mask][nod]);
/// acuma trb sa vad cum se pot combina starile
for (i = 0 ; i < v[nod].size() ; i++){
vecin = v[nod][i].first;
cst = v[nod][i].second;
for (st = 0 ; st < 32 ; st++){
if (mask & st)
continue;
/// trb sa nu aiba niciun bit comun
if (dist[mask | st][vecin] > dist[mask][nod] + cst + dist[st][vecin]){
dist[mask | st][vecin] = dist[mask][nod] + cst + dist[st][vecin];
h.push(make_pair(-dist[mask | st][vecin] , make_pair(mask|st , vecin)));
}
}
}
}
sum = INF;
for (i = 1 ; i <= n ; i++)
sum = min(sum , dist[(1 << k) - 1][i]);
fprintf (fout,"%lld",sum);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |