lightoj 1086 - Jogging Trails(状压dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1086
题解:题目就是求欧拉回路然后怎么判断有欧拉回路只要所有点的度数为偶数。那么就有欧拉回路所以只要找出度数为奇数的点然后在度数为奇数点之间选择两个这可以用状压来解决(由于无向图总的度数肯定是偶数的所以奇数度数的点肯定只有偶数个)。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <vector>
#define inf 0X3f3f3f3f
using namespace std;
const int M = 20;
int dp[1 << 17] , dis[M][M] , n , m , du[M] , a[M] , b[M];
void floyd() {
for(int i = 0 ; i < n ; i++) {
for(int j = 0 ; j < n ; j++) {
for(int k = 0 ; k < n ; k++) {
dis[j][k] = min(dis[j][i] + dis[i][k] , dis[j][k]);
}
}
}
}
int main() {
int t , Case = 0;
scanf("%d" , &t);
while(t--) {
scanf("%d%d" , &n , &m);
int u , v , w;
for(int i = 0 ; i < n ; i++) {
du[i] = 0;
for(int j = 0 ; j < n ; j++) {
dis[i][j] = inf;
}
dis[i][i] = 0;
}
int ans = 0;
for(int i = 1 ; i <= m ; i++) {
scanf("%d%d%d" , &u , &v , &w);
u--, v--;
ans += w;
du[u]++, du[v]++;
dis[u][v] = dis[v][u] = min(dis[u][v] , w);
}
floyd();
int cnt = 0;
for(int i = 0 ; i < n ; i++) {
if(du[i] % 2) {
a[cnt++] = i;
b[cnt - 1] = i;
}
}
memset(dp , inf , sizeof(dp));
dp[0] = 0;
for(int i = 0 ; i < cnt ; i++) {
for(int j = 0 ; j < cnt ; j++) {
for(int l = 0 ; l < (1 << cnt) ; l++) {
if((l & (1 << i)) || (l & (1 << j)) || i == j) continue;
dp[(l | (1 << i)) | (1 << j)] = min(dp[(l | (1 << i)) | (1 << j)] , dp[l] + dis[b[i]][b[j]]);
}
}
}
printf("Case %d: %d\n" , ++Case , dp[(1 << cnt) - 1] + ans);
}
return 0;
}
lightoj 1086 - Jogging Trails(状压dp)的更多相关文章
- [LightOJ 1018]Brush (IV)[状压DP]
题目链接:http://lightoj.com/volume_showproblem.php? problem=1018 题意分析:平面上有不超过N个点,如今能够随意方向划直线将它们划去,问:最少要划 ...
- lightoj 1119 - Pimp My Ride(状压dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1119 题解:状压dp存一下车有没有被搞过的状态就行. #include < ...
- lightoj 1037 - Agent 47(状压dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1037 #include <iostream> #include & ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- bit、byte、kb、mb、g的区别
1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1024MB1TB=1024GB bit是计算机数据的最小单元.要么是0,要么是1. byte 关键 ...
- PythonDay05
第五章 今日内容 字典 字典 语法:{'key1':1,'key2':2} 注意:dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表 不是连续的. 所以 ...
- java-web调用后台下载方法
后台下载指定文件必定会用到流, 无论使用poi还是使用jxl导出excel都需要用到流一种是outputstrean,另一种fileoutputstream第一种:如果想要弹出保存的提示框必须加入下列 ...
- linux环境下搭建自动化Jenkins管理工具
一.搭建一个jak--tomcat服务器到自己的linux服务器上 具体的服务器搭建这里可以参考华华大佬的博客:https://www.cnblogs.com/liulinghua90/p/46614 ...
- 【Java例题】6.2 日期类的使用
2.日期类的使用.显示今天的年月日.时分秒和毫秒数.显示今天是星期几.是今年内的第几天.显示本月共几天,今年是不是闰年.显示两个日期的差,包括年月日.时分秒和毫秒差值. package chapter ...
- 数据结构之稀疏矩阵C++版
//只是简单的演示一下,这个实际运用视乎不怎么多,所以java版不再实现 /* 希疏矩阵应用于对数据的压缩,仅仅保留不为0的数据 稀疏矩阵的转置,可以由多种方式,下面演示的稍显简单,时间复杂度略高O( ...
- [Inno Setup]写入注册表时32位系统和64位系统的路由
昨天下午组内一位同事跟说,他想在Inno Setup的安装包中写入一个注册表.目标位置是HKLM:\Software\下面创建自己的注册表项.然后说尝试了好几次都不行, 但是往HKCU下面写入却是OK ...
- 假装前端工程师(一)Icework + GitHub pages 快速构建可自定义迭代开发的 react 网站
icework + gh-pages 超快部署超多模版页面 项目地址:https://github.com/yhyddr/landingpage效果地址:https://yhyddr.github.i ...
- Spring 2017 Assignments1
一.作业要求 原版:http://cs231n.github.io/assignments2017/assignment1/ 翻译:http://www.mooc.ai/course/268/lear ...
- net core Webapi基础工程搭建(二)——创建工程
目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...