POJ 2404 Jogging Trails [DP 状压 一般图最小权完美匹配]
题意:找一个经过所有边权值最小的回路,$n \le 15$
所有点度数为偶则存在欧拉回路,直接输出权值和
否则考虑度数为奇的点,连着奇数条边,奇点之间走已经走过的路移动再走没走过的路
然后大体想一想就是权值和加上奇点的最小权匹配啦
蒟蒻不会带花树就打了状压$DP$
$f[s]$表示已经选的集合为$s$,考虑当前未选的最小点和哪一个未选的点匹配
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=,S=(<<)+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n,m,u,v,w,d[N][N],de[N];
void floyd(){
for(int k=;k<=n;k++)
for(int i=;i<=n;i++) if(d[i][k]<INF)
for(int j=;j<=n;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
int a[N],p,f[S];
void dp(){
//for(int i=1;i<=p;i++) printf("a %d\n",a[i]);
memset(f,0x3f,sizeof(f));
f[]=;
int All=<<p;
for(int s=;s<All;s++){
int i=;
while((<<i)&s) i++;
for(int j=i+;j<p;j++) if( !((<<j)&s) )
f[s|(<<i)|(<<j)]=min(f[s|(<<i)|(<<j)],f[s]+d[a[i]][a[j]]);
}
}
int main(){
freopen("in","r",stdin);
while( (n=read()) ){
m=read();
for(int i=;i<=n;i++){
de[i]=;
for(int j=;j<=n;j++) if(i!=j) d[i][j]=INF;
}
int sum=;
for(int i=;i<=m;i++){
u=read(),v=read(),w=read();
d[u][v]=d[v][u]=min(d[u][v],w); sum+=w;
de[u]++;de[v]++;
}
p=;
for(int i=;i<=n;i++) if(de[i]&) {a[p++]=i;}
if(!p) {printf("%d\n",sum);continue;} floyd();
dp();
printf("%d\n",sum+f[(<<p)-]);
}
}
POJ 2404 Jogging Trails [DP 状压 一般图最小权完美匹配]的更多相关文章
- POJ 2404 Jogging Trails(最小权完美匹配)
[题目链接] http://poj.org/problem?id=2404 [题目大意] 给出一张图,求走遍所有的路径至少一次,并且回到出发点所需要走的最短路程 [题解] 如果图中所有点为偶点,那么一 ...
- lightoj 1086 - Jogging Trails(状压dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1086 题解:题目就是求欧拉回路然后怎么判断有欧拉回路只要所有点的度数为偶数.那 ...
- POJ 2404 Jogging Trails
Jogging Trails Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2122 Accepted: 849 Des ...
- poj 2288 Islands and Bridges ——状压DP
题目:http://poj.org/problem?id=2288 状压挺明显的: 一开始写了(记忆化)搜索,但一直T: #include<iostream> #include<cs ...
- 【HDU】4352 XHXJ's LIS(数位dp+状压)
题目 传送门:QWQ 分析 数位dp 状压一下现在的$ O(nlogn) $的$ LIS $的二分数组 数据小,所以更新时直接暴力不用二分了. 代码 #include <bits/stdc++. ...
- 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...
- POJ 3565 Ants 【最小权值匹配应用】
传送门:http://poj.org/problem?id=3565 Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: ...
- 【POJ 2195】 Going Home(KM算法求最小权匹配)
[POJ 2195] Going Home(KM算法求最小权匹配) Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ 1185 炮兵阵地(状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26426 Accepted: 10185 Descriptio ...
随机推荐
- 使用vue-axios请求geoJson数据报错的问题
最近的项目用到了echarts一个带有散点地图的图表,按照正常jquery写法应该使用ajax请求geojson的数据动态去切换地图,就像下面这样 $.get('Js/map/' + cityData ...
- 向ajaxform和ajaxgrid中添加数据
--ajaxform function add(){ $.request({ action:"add", success:onaddcomplete }); } function ...
- virtualbox虚拟机NAT模式下不能连接外网
背景 给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为"网络地址转换(NAT)"和"仅主机(Host-Only)适配器&qu ...
- Pycharm+django新建Python Web项目
这两天初学Python,首先是学习Python语法有PyCharm就可以运行Console程序了,因为是初学所以,尽量写的比较详细,包括参考的资料地址... 1.下载Python,并安装[本文版本 ...
- IDEA for Mac注册码使用
尼玛,一不注意把磁盘抹掉了,重新下idea发现 之前的破解方法失效了 之前所有的 idea 授权服务器已遭JetBrains封杀,所以重新下载后 用之前的方法已经然并卵了,苦苦google后,发现新大 ...
- 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建
core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...
- 织梦dedecmsV5.7联动类型无法显示的处理方法
最近织梦dedecms在新的功能中添加了一个联动类型这样的一个功能.所谓的联动类型,类似于一级目录下有二级目录,二级目录下又有三级目录,可以理解为数据结构中树形结构.级和级之间都是有着联系的.为了让大 ...
- 邓_thinkphp口试
描述php框架开发 通过提供一个开发Web程序的基本架构,PHP开发框架把PHPWeb程序开发摆到了流水线上.换句话说,PHP开发框架有助于促进快速软件开发(RAD),这节约了你的时间,有助于创建更为 ...
- Lytro 光场相机重对焦C++实现以及CUDA实现
前面有几篇博客主要介绍了光场和光场相机相关知识,以及重对焦效果和多视角效果的展示.算是自己学习光场过程的一种总结. 这次贴上自己用OpenCV/C++编写的重对焦算法实现(包含CPU版和CUDA GP ...
- Node.js进阶:5分钟入门非对称加密方法
前言 刚回答了SegmentFault上一个兄弟提的问题<非对称解密出错>.这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下. 非对称加密的理 ...