hdu3311
#include <bits/stdc++.h>
using namespace std;
#define maxn 10000
#define INF 6e8
bool inq[];
int dp[][],v[];
struct re{
int a,b,c;
}a[maxn];
int l,n,m,p,head[],dis[][];
void arr(int x,int y,int z)
{
a[++l].a=head[x];
a[l].b=y;
a[l].c=z;
head[x]=l;
}
void spfa()
{
queue<int> q;
for (int s=;s<=n+m;s++)
{
for (int j=;j<=n+m;j++)
dis[s][j]=INF;
dis[s][s]=;
q.push(s); inq[s]=;
while (!q.empty())
{
int x=q.front(); q.pop();
int u=head[x];
while (u)
{
int v=a[u].b;
if (dis[s][v]>dis[s][x]+a[u].c)
{
dis[s][v]=dis[s][x]+a[u].c;
if (!inq[v])
{
q.push(v); inq[v]=;
}
}
u=a[u].a;
}
inq[x]=;
}
}
}
void get_ans()
{
for (int i=;i<=(<<n)-;i++)
for (int j=;j<=n+m;j++)
dp[i][j]=INF;
for (int i=;i<=n;i++)
dp[<<(i-)][i]=;
for (int i=;i<=(<<n)-;i++)
{
for (int j=;j<=n+m;j++)
{
for (int k=i;k;k=(k-)&i)
if (dp[i][j]>dp[k][j]+dp[i^k][j])
dp[i][j]=dp[k][j]+dp[i^k][j];
} for (int k1=;k1<=n+m;k1++)
for (int k2=;k2<=n+m;k2++)
if (dp[i][k1]>dp[i][k2]+dis[k2][k1])
dp[i][k1]=dp[i][k2]+dis[k2][k1];
} }
int main()
{
freopen("noip.in","r",stdin);
std::ios::sync_with_stdio(false);
while (cin>>n>>m>>p&&n>)
{
l=;memset(head,,sizeof(head));
for (int i=;i<=m+n;i++)
{
cin>>v[i];
arr(i,,v[i]);
}
int c,d,e;
for (int i=;i<=p;i++)
{
cin>>c>>d>>e;
arr(c,d,e); arr(d,c,e);
}
spfa();
get_ans();
cout<<dp[(<<n)-][]<<endl;
}
return ;
}
hdu3311的更多相关文章
- 【hdu3311】Dig The Wells(斯坦纳树+dp)
传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都 ...
随机推荐
- Python排序算法之选择排序
选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例): 1. 选择一个基准球 2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换 3. 第一轮过 ...
- 算法排序【时间复杂度O(n^2)】
排序算法的两个原则: 1.输出结果为递增或者递减. 2.输出结果为原输入结果的排列或者重组. 平均时间复杂度为O(n^2)的排序算法有三种: 冒泡排序,插入排序,选择排序. 一.冒泡排序: 即谁冒泡泡 ...
- 卷积神经网络(CNN)学习笔记1:基础入门
卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ...
- ROS学习笔记(一) # ROS参数服务器
参考 roscpp/Overview/Parameter Server 0. 概述 ROS参数服务器能够保存 string, int, float, double, bool, list, dicti ...
- Docker安装Zookeeper
⒈下载 docker pull zookeeper ⒉运行 docker run --name zk -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart ...
- JS window对象的top、parent、opener含义介绍
1.top该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.openeropener用于在window.open的页面引用执行该window ...
- 《像计算机科学家一样思考Python》-递归
斐波那契数列 使用递归定义的最常见数学函数是 fibonacci (斐波那契数列),见其 定义 fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fib ...
- springboot系列十三、springboot集成swaggerUI
一.Swagger介绍 Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. ...
- eclipse自动编译
自动编译:对java应用没有什么意义,对web应用来说,当修改了代码时,会自动帮你编译并发布到web容器中去,省的重启web容器了. build:编译,Eclipse的编译是基于时间戳的判断机制的.c ...
- sqlserver 备份 与 还原
背景 真是够懒得,一看这个内容,如此简单.当时的想法就是网上教程一堆,全记下来有啥意思,只是记录了要点.不过写到这里,也就写个别的吧.sqlserver与Oracle比起来,我感觉有个重要差距就是存储 ...