Portal

题意:无相带权图上的中国邮路问题。即:从任意一点出发,每条边至少走一次最后回到起点,所用的最短距离。

度数为奇数的点一定为偶数个,将这些点建新图,两两之间距离为原图最短距离。
然后最小权完美匹配。用状压dp解决。答案=原图边权和+匹配和。
算法的正确性: 因为最终要回到原点,易知任意一个奇数度点,至少有一条边要走两次,那么最优的方案就是,奇数度点之间两两配对,然后重复走这些边一次。
感性的认识就好了。。不必计较。

【代码】

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#define INF 1000000001
using namespace std;
typedef long long ll;int read()
{int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}int n,m,Ans,Top;
int F[32768],D[1005],Dis[16][16];
int St[16];void Floyd()
{for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)Dis[i][j]=min(Dis[i][j],Dis[i][k]+Dis[k][j]);
} void Input_Init()
{m=read();Ans=Top=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) if(i!=j) Dis[i][j]=INF;D[i]=0;}for(int i=1;i<=m;i++){static int x,y,z;x=read(),y=read(),z=read();D[x]++;D[y]++;if(Dis[x][y]>z) Dis[x][y]=Dis[y][x]=z;Ans+=z;}
}void Solve()
{for(int i=1;i<=n;i++) if(D[i]&1) St[++Top]=i;for(int i=1;i<1<<Top;i++) F[i]=INF;for(int i=0;i<1<<Top;i++){int x=1;while(1<<(x-1)&i) x++;for(int y=x+1;y<=Top;y++) if((i&(1<<(y-1)))==0)F[i|(1<<(x-1))|(1<<(y-1))]=min(F[i|(1<<(x-1))|(1<<(y-1))],F[i]+Dis[St[x]][St[y]]);}printf("%d\n",F[(1<<Top)-1]+Ans);
}int main()
{while(scanf("%d",&n)&&n){Input_Init();Floyd();Solve();}return 0;
}

POJ2404:Jogging Trails相关推荐

  1. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  2. [UVa10296]Jogging Trails

    题目大意: 中国邮递员问题. 给你一个无向带权连通图,求经过所有边并返回起点的最短路径. 思路: Edmonds-Johnson算法. 显然,当原图为欧拉图时,答案即为其欧拉回路的长度. 考虑原图不存 ...

  3. poj 2404 Jogging Trails

    http://poj.org/problem?id=2404 题意: 一张带权无向图,求选择一个起点,每条边至少被经过一遍,再回到起点的最小代价 加最小代价的边,使图变成欧拉图 无向图欧拉图:所有点的 ...

  4. POJ 2404 Jogging Trails 笔记

    跑马拉松.n座补水站,m条道路.已知每条道路两端的补水站和道路长度.求跑遍所有道路至少一遍的最短路线长度.

  5. [中国邮路问题 欧拉回路 最短路 一般图匹配||状压DP] FZU 1009 Jogging Trails

    论文:仇荣琦<欧拉回路性质与应用探究> 本来以为完全图匹配有什么高深的算法 结果去看参考资料里的论文就是带花树 汗 这道题n小 状压每个点的奇偶性 #include<cstdio&g ...

  6. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  7. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  8. c语言大小写字母互换1005,1005 Jugs,1005jugs

    1005 Jugs,1005jugs 辗转相减,新手入门题.两个容量的灌水题,无所谓最优解. 1 #include 2 3 intmain(){4 intA,B,T,sA,sB;5 while(sca ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

最新文章

  1. opencv-python的格式转换 RGB与BGR互转
  2. MySQL笔记13:查询结果集
  3. 关于联邦学习What、How、Who的灵魂三问
  4. asp.net的dropDownlist只显示第一个字
  5. javascript给类添加的方法
  6. python函数式编程-装饰器
  7. Android 开源无线投屏,用树莓派Raspberry Pi 4B制作一个无线投屏器(20200803)
  8. 深度学习——VGG16模型详解
  9. 什么是AOP切面编程
  10. linux telnet trying,telnet ip port 显示trying一般是什么情况?急。。。
  11. matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
  12. 勒索软件Cerber和TeslaCrypt的区别-------典型的勒索软件家族
  13. win10办公局域网共享文件夹方法
  14. python打印九九乘法口诀_PYTHON如何打印九九乘法表
  15. phpmywind 导航函数详解整理中……
  16. 三阶及四阶Runge-Kutta法
  17. 计算机硬件日语,求一些电脑硬件的日语说法(比如显卡等)
  18. SQL学习之full outer join关键字
  19. 电子报刊制作软件之比较
  20. Java 内部类 面试“变态题”

热门文章

  1. 你以为大厂的代码就不烂了?烂成一坨屎...
  2. Pregel: A System for Large-Scale Graph Processing
  3. 【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)
  4. custom的短语_custom到底是什么意思?
  5. 全球教育ERP系统软件行业调研及趋势分析报告
  6. 键盘记录器(有发送到指定qq邮箱的功能。附源代码及使用教程,免费下载)
  7. 计算机三级网络技术小技巧,计算机三级PC技术过关心得技巧
  8. python numpy中setdiff1d的用法
  9. 解决docker容器中文字符乱码问题
  10. C# 把时间转为秒_Python基础学习笔记(六)日期与时间