【S2状态压缩】慢跑小路

Time Limit:10000MS  Memory Limit:65536K
Total Submit:31 Accepted:16 
Case Time Limit:1000MS

Description

Gord准备参加马拉松赛跑,他在家的后面的一个公园进行练习。公园里面有很多设置有座椅和饮用水的休息点,庞大的慢跑小路构成的道路网将这些休息点连接了起来。Gord想要找出最短的一条慢跑小路路径,要求这条路径将每条小路都至少经过了一次。

Input

输入有多组数据,对于每组数据: 
第一行,两个整数n和m,分别表示休息点的数量和小路的数量。 
接下来m行,每行包含三个整数x,y,z,代表一条小路的信息,在休息点x和休息点y之间有条长度为z的慢跑小路。 
注意:两个休息点之间有可能有多条慢跑小路直接相连。Gord可以选择任意休息点作为起点,但是路径的终点和起点必须相同。 
单独的一行一个数字0表示输入结束。

Output

对于每组测试数据,输出一行,每行一个整数,表示最短路径的长度。

Sample Input

4 5
1 2 3
2 3 4
3 4 5
1 4 10
1 3 12
0

Sample Output

41

Hint

n <= 15 
m < 1000 
z<=10000

Source

Waterloo local 2002

首先我们很容易知道这个图是一个无向图,那么在所求的回路内所有点的度数之和一定为一个偶数

我们分析可以发现,图中的欧拉回路的最短长度为所有边的长度+回到出发点的多走的长度,而这多走的边的端点一定是度数为奇的点

那么我们先求出来所有点的度数,对于一个点,如果他的度数为偶数,我们就可以不用讨论

我们求出所有度数为奇的点的集合s,对于s的子集i,我们设f[i]表示将i集合中的点两两配对所需的最小代价,那么得到
方程:

f[i|(1<<j)|(1<<k)]=f[i]+map[j][k]    j,k∈s且j,k∉i

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=20,inf=1e9;
int n,m,ans,s;
int map[maxn][maxn],f[1<<16],d[maxn];
inline void _read(int &x){  char t=getchar();bool sign=true;  while(t<'0'||t>'9')  {if(t=='-')sign=false;t=getchar();}  for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';  if(!sign)x=-x;
}
bool ok(int x){for(int i=0;i<n;i++)if(!(s&(1<<i))&&(x&(1<<i)))return 0;return 1;
}
void clear(){ans=0;for(int i=0;i<n;i++)for(int j=0;j<n;j++)map[i][j]= i==j?0:inf;memset(d,0,sizeof(d));
}
int main(){int i,j,a,b,c,k;while(scanf("%d",&n)&&n){_read(m);clear();for(i=1;i<=m;i++){_read(a);_read(b);_read(c);ans+=c;a--,b--;//将点从0开始编号d[a]++,d[b]++;if(map[a][b]>c)map[a][b]=map[b][a]=c;}s=0;for(i=0;i<n;i++)if(d[i]&1)s|=(1<<i);for(i=1;i<=s;i++)f[i]=inf;for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)map[i][j]=min(map[i][k]+map[k][j],map[i][j]);//Floyd求出最短路for(i=0;i<=s;i++)if(ok(i))for(j=0;j<n;j++)if((s&(1<<j))&&(!(i&(1<<j))))for(k=j+1;k<n;k++)if((s&(1<<k))&&(!(i&(1<<k))))f[i|(1<<j)|(1<<k)]=min(f[i|(1<<j)|(1<<k)],f[i]+map[j][k]);printf("%d\n",ans+f[s]);       }
}

NKOI 1905 慢跑小路相关推荐

  1. A - Expanding Rods POJ - 1905(二分)

    A - Expanding Rods POJ - 1905(二分) 题目 Problem Description When a thin rod of length L is heated n deg ...

  2. 骑摩托的蒙娜丽莎 - 曼妙风骚的花式慢跑算法

    简 介: 你没有想到吧,在第十六届全国大学生智能车竞赛单车拉力组获得单车比赛全国冠军的队伍的单车控制算法居然是PID参数调整不当造成的振荡现象!没错,出乎所有人的意料.下面让我们看看来自上海海事大学单 ...

  3. 服务器系统linux怎么安装教程,CentOS 8.0.1905 linux服务器系统安装与配置图解教程...

    说明: 截止目前CentOS 8.x最新版本为CentOS 8.0.1905,下面介绍CentOS 8.0.1905的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 8.0.1905 ...

  4. 特斯拉炫技现场:电驴、行人、快递车,中国的小路难不倒Autopilot自动驾驶

    栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAI 特斯拉官方推特连续发射了四段开车视频. 这是想让全球的人类知道,有了Autopilot便能更加放心安全地驾驶,即便是要应付我国的神秘路况. ...

  5. WARNING: at net/core/dev.c:1905 skb_warn_bad_offload+0x94/0xb4() 解决思路

    内核开发交流群 745510310 欢迎加入学习 开发一个内核抓包模块,设计思路是通过在netfilter的PRE_ROUTING和POST_ROUTING链上增加两个钩子函数(input_hook ...

  6. 计算机音乐乡间小路,《乡间的小路课件》初中音乐湘文艺2011课标版七年级下册课件.ppt...

    <乡间的小路课件>初中音乐湘文艺2011课标版七年级下册课件 乐理新知 1.附点音符:附点表示延长前一个音符时值的一半 2.三连音:一拍内3个音以均匀的时值进行 乡间的小路 走在乡间的小路 ...

  7. poj 1905 Expanding Rods(二分)

    题目:http://poj.org/problem?id=1905 题意:看图就明白了... 杆原长为L,受热膨胀弯曲后的长度为 L'=(1+n*C)*L,求中心的移动的距离h: 思路:推出两个公式: ...

  8. 【运动快乐】享受赤脚慢跑 收获健康快乐

    享受赤脚慢跑 收获健康快乐 --写给想锻炼的您 当您看到赤脚客时,您或许忍不住会问:为什么要赤脚跑呢?不怕扎破脚?跑起来不会硌疼么? 赤脚踩在看起来扎脚硌脚的路面上,因为怕疼,我们的脚落地会轻而又轻. ...

  9. 天天早上慢跑一小时对身体好吗?

    从养生的角度来说,慢跑是最好的有氧运动方式.身体不容易受伤,强度大小容易被人接受,难度系数比较低,适合大多数想跑步锻炼的人,长时间坚持下来,对增强耐力,提高身体的综合素质,非常有帮助.如果跑步刚入门, ...

最新文章

  1. (0061)iOS开发之iPad开发:UISplitViewController分割视图控制器
  2. JSP页面中四种“返回按钮”的使用
  3. git 常用操作命令(Common operation)
  4. 程序员特有的9个坏习惯
  5. linux开启防火墙ping,如何在防火墙中放开ping
  6. 信息奥赛一本通(1112:最大值和最小值的差)
  7. 万法归宗之Hadoop编程无界限
  8. jquery.js和jquery-1.4.2.min.js的区别
  9. 关于量子计算机的科学论文,量子计算机论文,关于科学家尝试用量子计算机创造时间旅行论文范文-毕业论文网...
  10. 转:Maven通俗讲解
  11. java线程执行顺序执行_Java多线程系列四——控制线程执行顺序
  12. 电子白板计算机培训心得,“希沃电子白板”培训心得体会3篇
  13. 推荐几款国产快速启动工具软件 总有一款适合你的
  14. 抖音快手短视频去水印小程序解析接口API开发文档
  15. 《华为你学不会》读书笔记
  16. 《传统相声开场小唱》
  17. 自定义数据集算子数据结构
  18. 数据库开发技术的课程记录
  19. 深度学习:GAN 对抗网络原理详细解析(零基础必看)
  20. DirectX是什么,出现游戏打不开问题解决方案

热门文章

  1. 大话商学院(3)--有一种网络效应叫赢者通吃
  2. 分享 stormzhang的Andoid学习之路
  3. 移动编程基础知识(复习提纲)
  4. iPhone11与iPhonexs电池容量和充电速度对比
  5. 实现listview条目点击显示和隐藏
  6. Mac电脑常用快捷键,官方推荐
  7. AndroidStudio蓝牙通信
  8. 产品经理的职业生涯规划是怎么样的?
  9. 如何脱离USB给ESP8266下载程序?
  10. FP7195大功率零压差全程无频闪调光DC-DC恒流芯片(兼容调光器:PWM调光,无极调光,0/1-10V调光)