HDU 5418 Victor and World

Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u

After trying hard for many years, Victor has finally received a pilot license. To have a celebration, he intends to buy himself an airplane and fly around the world. There are  countries on the earth, which are numbered from  to . They are connected by  undirected flights, detailedly the -th flight connects the -th and the -th country, and it will cost Victor's airplane  L fuel if Victor flies through it. And it is possible for him to fly to every country from the first country.

Victor now is at the country whose number is , he wants to know the minimal amount of fuel for him to visit every country at least once and finally return to the first country.

Input

The first line of the input contains an integer , denoting the number of test cases. 
In every test case, there are two integers  and  in the first line, denoting the number of the countries and the number of the flights.

Then there are  lines, each line contains three integers  and , describing a flight.

.

.

.

.

.

Output

Your program should print  lines : the -th of these should contain a single integer, denoting the minimal amount of fuel for Victor to finish the travel.

Sample Input

1
3 2
1 2 2
1 3 3

Sample Output

10
/*/
一开始题目没读仔细,以为是一个最小树,秒WA一发;
后来想半天发现这个有环,就不是最小树了,搜了一下是Floyd+dp状压。 写完之后一直发现输出的是INF=0x3f3f3f3f ,找了半天最后想到二进制标记状态这里,maps标记用0 0开始会舒服好多。改过来就对了。题目很有意思。。 AC代码:
/*/

#include"algorithm"
#include"iostream"
#include"cstring"
#include"cstdlib"
#include"string"
#include"cstdio"
#include"vector"
#include"cmath"
#include"queue"
using namespace std;
typedef long long LL;
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(x))
#define MX 401
#define INF 0x3f3f3f3f int maps[20][20];
int dp[200000][20],vis[20]; void init() { memset(maps,0x3f);
memset(vis,0x3f);
memset(dp ,0x3f);
} int main() {
int T;
scanf("%d",&T);
while(T--) {
init();
int n,m,u,v,w;
scanf("%d%d",&n,&m);
for(int i=0; i<m; i++) {
scanf("%d%d%d",&u,&v,&w);
if(maps[--u][--v] > w) //状态压缩从0开始会好写一些
maps[v][u]=maps[u][v]= w;
}
for(int i=0; i<n; i++)maps[i][i]=0; //标记自己到自己距离为0 //后面会要加到这个数字。。
for(int k=0; k<n; k++) {
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]); //Floyd 把去某一点的最小路程计算出来
}
}
}
dp[1][0]=0;
vis[0]=0;
m=1<<n;
for(int i=1; i<m; i++) {
for(int j=0; j<n; j++) {
if(dp[i][j]==INF)continue;
for(int k=0; k<n; k++) {
if(i&(1<<k)||maps[j][k]==INF)continue; //二进制 1 表示该点走过,0表示没走过,第二维表示现在所在的点。压缩状态
if( dp[i|(1<<k)][k]>dp[i][j]+maps[j][k]) {
dp[i|(1<<k)][k]=dp[i][j]+maps[j][k];
vis[k]=min(vis[k],dp[i|(1<<k)][k]); //比较,去到下一点需要的最小路
}
}
}
}
int minn=1e9+100;;
for(int i=0; i<n; i++) {
minn=min(minn,dp[m-1][i]+vis[i]);
}
printf("%d\n",minn);
}
return 0;
}

  

 

ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩的更多相关文章

  1. POJ3311Hie with the Pie(floyd传递+DP,状态压缩)

    问题 The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfo ...

  2. HDU 1429 胜利大逃亡(续)(DP + 状态压缩)

    胜利大逃亡(续) Problem Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢 ...

  3. hdu 4352 XHXJ's LIS (数位dp+状态压缩)

    Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully readin ...

  4. HDU 1074 Doing Homework (dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...

  5. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. HDU 5418——Victor and World——————【状态压缩+floyd】

    Victor and World Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Other ...

  7. HDU 5418 Victor and World 允许多次经过的TSP

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5418 bestcoder(中文): http://bestcoder.hdu.edu.cn ...

  8. HDU 5418 Victor and World(状压DP+Floyed预处理)

    Victor and World Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Other ...

  9. HDU 5418 Victor and World (状态压缩dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目大意:有n个结点m条边(有边权)组成的一张连通图(n <16, m<100000 ...

随机推荐

  1. 使用Timer和ScheduledThreadPoolExecutor执行定时任务

    Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ...

  2. CentOS FTP基于虚拟用户的配置

    详细可以看:http://www.linuxidc.com/Linux/2013-12/94242.htm 所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的.虚拟用户不能登录 ...

  3. 在python多进程中使用manager和Barrier

    注意:Barrier是PYTHON3才有的功能,在2中无法测试. #!/usr/bin/env python # -*- coding: utf-8 -*- import multiprocessin ...

  4. android 入门-布局

    android:gravity 针对本view 的位置. android:layout_gravity 本view相对于父布局view的位置. android:layout_alignParentRi ...

  5. ASP.NET 5探险(2):上传文件

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在ASP.NET 5(MVC 6)中处理上传文件的方式和之前有所不同. 在MVC 5之 ...

  6. 深入剖析iLBC的丢包补偿技术(PLC)

    转自:http://blog.csdn.net/wanggp_2007/article/details/5136609 丢包补偿技术(Packet Loss Concealment——PLC)是iLB ...

  7. ICP 算法步骤

    The Iterative Closest Point (ICP) is an algorithm employed to match two surface representations, suc ...

  8. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  9. git warning: LF will be replaced by CRLF in...

    如果你有git项目,在提交代码的过程中可能会碰到上面的警告,特别是的项目中包含序列化对象的时候,你可能要小心!! 警告的含义是说换行符的,不同的操作系统的换行符是不一致的,如果你不清楚,真得看看这个 ...

  10. 智能车学习(六)——OLED屏幕使用

    一.代码展示 1.头文件: #ifndef OLED_H_ #define OLED_H_ extern unsigned char Draw[]; extern const unsigned cha ...