[POI 2007] 旅游景点
2024-08-31 04:58:31
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=1097
[算法]
首先,用Dijkstra算法求出2-k+1到每个点的最短路
然后,我们用f[S][i]表示目前停留城市集合为S,现在在城市i,最短的路径
状压DP即可
[代码]
#include<bits/stdc++.h>
using namespace std;
#define MAXN 20010
#define MAXM 200010
#define MAXK 25
const int INF = 2e9;
const int MAXS = << ; int i,j,x,n,m,k,u,v,w,tot,g,ts,ans,Mask;
int head[MAXN],s[MAXK];
int dist[MAXK][MAXN],f[MAXS][MAXK];
bool visited[MAXN]; struct Edge
{
int to,w,nxt;
} e[MAXM << ]; inline void addedge(int u,int v,int w)
{
tot++;
e[tot] = (Edge){v,w,head[u]};
head[u] = tot;
}
inline void dijkstra(int s)
{
int i,v,w;
priority_queue< pair<int,int> > q;
pair<int,int> cur;
for (i = ; i <= n; i++)
{
dist[s][i] = INF;
visited[i] = false;
}
dist[s][s] = ;
q.push(make_pair(,s));
while (!q.empty())
{
cur = q.top();
q.pop();
if (visited[cur.second]) continue;
visited[cur.second] = true;
for (i = head[cur.second]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (dist[s][cur.second] + w < dist[s][v])
{
dist[s][v] = dist[s][cur.second] + w;
q.push(make_pair(-dist[s][v],v));
}
}
}
}
int main()
{ scanf("%d%d%d",&n,&m,&k);
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
scanf("%d",&g);
for (i = ; i <= g; i++)
{
scanf("%d%d",&u,&v);
s[v] |= ( << (u - ));
}
for (i = ; i <= k + ; i++) dijkstra(i);
Mask = ( << k) - ;
for (i = ; i <= Mask; i++)
{
for (j = ; j <= k + ; j++)
{
f[i][j] = INF;
}
}
for (i = ; i <= k + ; i++)
{
if (!s[i])
f[ << (i - )][i] = dist[i][];
}
f[][] = ;
for (i = ; i <= Mask; i++)
{
for (j = ; j <= k + ; j++)
{
for (x = ; x <= k + ; x++)
{
ts = i | ( << (x - ));
if (((s[x] & i) == s[x]) && f[i][j] + dist[j][x] < f[ts][x])
f[ts][x] = f[i][j] + dist[j][x];
}
}
}
ans = INF;
for (i = ; i <= k + ; i++) ans = min(ans,f[Mask][i] + dist[i][n]);
printf("%d\n",ans); return ;
}
最新文章
- java IO流 Zip文件操作
- 很久以前写的一个 ShareRestrictedSD 类
- [译]Dynamics AX 2012 R2 BI系列-Cube概览
- java 动态代码生成。
- idea
- rem vh vw vmin vmax ex ch
- EmWin 接触---基础函数
- prime docker-compose 环境运行试用
- SQL2008配置管理工具服务显示远程过程调用失败
- symbolicatecrash App Bug 分析工具
- 看见- 柴静-kindle书摘
- nginx正向vs反向代理
- C# 数组基础
- Python进行数据分析—可视化之seaborn
- 使用.gitignore忽略文件
- poscms用法总结(非定制开发,不涉及后台代码)
- 了解一个名词——GTD
- solidity语言
- SpringBoot---数据缓存(未完待续)
- Docker | 第一章:Docker简介
热门文章
- DataTable和List相互转换的类
- 工厂方法模式(Product)C++实现
- 从实现HTML页面局部刷新到JSONP
- 最小环 hdu1599 poj1734
- nyoj___大数阶乘
- https://coderwall.com/p/7smjkq/multiple-ssh-keys-for-different-accounts-on-github-or-gitlab
- winserver2012安装.net 3.5
- hdu5676 ztr loves lucky numbers(dfs)
- Android对手尽皆铩羽,鸿蒙如何绝地求生?
- Python笔记6----数组