# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
45073 | nibnalin | Cities (BOI16_cities) | C++17 | 4097 ms | 38164 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
typedef long long int lli;
const int maxn = lli(1e5)+5, maxk = 6;
const lli inf = lli(1e17)+5;
int n, A[maxk], marker[maxn];
lli D[maxk][maxn], dp[(1<<maxk)][maxn];
vector<pair<int, lli>> graph[maxn];
void dijkstra(int type, int node)
{
for(int i = 0;i < n;i++) D[type][i] = inf;
D[type][node] = 0;
set<pair<lli, int>> Q;
Q.insert({D[type][node], node});
while(!Q.empty())
{
pair<lli, int> top = *Q.begin();
Q.erase(Q.begin());
for(auto it: graph[top.second])
{
if(D[type][it.first] > D[type][top.second]+it.second)
{
if(D[type][it.first] != inf) Q.erase({D[type][it.first], it.first});
D[type][it.first] = D[type][top.second]+it.second;
Q.insert({D[type][it.first], it.first});
}
}
}
}
int main(void)
{
int k, m, u, v;
lli w;
scanf("%d%d%d", &n, &k, &m);
for(int i = 0;i < k;i++)
{
scanf("%d", &A[i]);
A[i]--;
}
for(int i = 0;i < m;i++)
{
scanf("%d%d%lld", &u, &v, &w);
u--, v--;
graph[u].push_back({v, w}), graph[v].push_back({u, w});
}
for(int i = 0;i < k;i++) dijkstra(i, A[i]);
for(int mask = 1;mask < (1<<k);mask++)
{
set<pair<lli, int>> Q;
for(int i = 0;i < n;i++)
{
dp[mask][i] = inf, marker[i] = 0;
for(int j = 0;j < k;j++)
{
if((mask&(1<<j))) dp[mask][i] = min(dp[mask][i], dp[(mask^(1<<j))][i]+D[j][i]);
}
Q.insert({dp[mask][i], i});
}
while(!Q.empty())
{
pair<lli, int> top = *Q.begin();
Q.erase(Q.begin());
if(marker[top.second]) continue;
marker[top.second] = 1;
for(auto it: graph[top.second])
{
if(dp[mask][it.first] > dp[mask][top.second]+it.second)
{
dp[mask][it.first] = dp[mask][top.second]+it.second;
Q.insert({dp[mask][it.first], it.first});
}
}
}
}
lli res = inf;
for(int i = 0;i < n;i++) res = min(res, dp[(1<<k)-1][i]);
printf("%lld\n", res);
}
컴파일 시 표준 에러 (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... |