题意:给你一个无向图,求从0号点开始遍历所有的指定点再回到0号点的最短路径

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#define N 100010
#define ll long long
#define INF 10000000000000LL
using namespace std;
ll head[N],vis[N],dis[N],f[][],a[],b[],n,m,k,ans=INF;
struct node
{
ll v,pre,t;
};node e[N*];
ll read()
{
ll num=,flag=;char c=getchar();
while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num*flag;
}
void add(ll i,ll x,ll y,ll z)
{
e[i].v=y;
e[i].t=z;
e[i].pre=head[x];
head[x]=i;
}
ll spfa(ll s,ll t)
{
for(ll i=;i<=n;i++)dis[i]=INF;
memset(vis,,sizeof(vis));
queue<int> q;
q.push(s);vis[s]=;dis[s]=;
while(!q.empty())
{
ll u=q.front();vis[u]=;q.pop();
for(ll i=head[u];i;i=e[i].pre)
if(dis[e[i].v]>dis[u]+e[i].t)
{
dis[e[i].v]=dis[u]+e[i].t;
if(!vis[e[i].v])
{
vis[e[i].v]=;
q.push(e[i].v);
}
}
}
return dis[t];
}
void work()
{
n=read();m=read();
for(ll i=;i<=m;i++)
{
ll x=read()+,y=read()+,z=read();
add(i*-,x,y,z);add(i*,y,x,z);
}
k=read();a[]=;
for(ll i=;i<=k+;i++)
a[i]=read()+;
for(ll i=;i<=k+;i++)
for(ll j=i+;j<=k+;j++)
f[i][j]=f[j][i]=spfa(a[i],a[j]);
for(ll i=;i<=k+;i++)b[i]=i;
do
{
ll p=f[b[]][b[k+]];
for(ll i=;i<=k+;i++)
p+=f[b[i-]][b[i]];
ans=min(ans,p);
}while(next_permutation(b+,b+k+));
cout<<ans<<endl;
}
int main()
{
freopen("jh.in","r",stdin);
ll T=read();
while(T--)
{
memset(head,,sizeof(head));
memset(f,,sizeof(f));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(e,,sizeof(e));
ans=INF;
work();
}
return ;
}

Shopping(hdu 3768)的更多相关文章

  1. 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)

    //1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...

  2. Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064 题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b ...

  3. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

  4. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

  5. War Chess (hdu 3345)

    http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...

  6. 2012年长春网络赛(hdu命题)

    为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...

  7. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  8. BestCoder Round #68 (div.2) geometry(hdu 5605)

    geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  9. 2013多校联合2 I Warm up 2(hdu 4619)

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

随机推荐

  1. android 读取sd卡中的图片

    一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限  -->    <uses-permission android:name="android.perm ...

  2. angularJS学习1

    <!DOCTYPE html><html ng-app><head> <script src="http://code.angularjs.org/ ...

  3. Ognl基本使用

    ---恢复内容开始--- Ognl默认是从“根”中取数据的 下面Demo中用的是 Ognl.getValue(String expression, Map context, Object root) ...

  4. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  5. struts2基本配置

    struts.xml 放在src目录下 <?xml version="1.0" encoding="UTF-8"?> <struts> ...

  6. AndroidStudio-引用jar包及so文件

    一.引用jar文件    1.将jar文件复制.粘贴到app的libs目录中:    2.右键点击jar文件,并点击弹出菜单中的"Add As Library",将jar文件作为类 ...

  7. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  8. centos安装软件Error: Cannot find a valid baseurl for repo: base

    今天使用yum安装软件,出现下面的提示: Loaded plugins: fastestmirror, refresh-packagekit, securityLoading mirror speed ...

  9. Nginx HA 及https配置部署

    Nginx HA 整体方案架构为: (内网192.168.199.5) +-----------VIP----------+ | | | | Master Backup 192.168.199.90 ...

  10. Python ===if while for语句 以及一个小小网络爬虫实例

    if分支语句 >>> count=89 >>> if count==89: print count 89                          #单分支 ...