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 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- jumpserver1.4.1 安装过程
# 修改字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 echo 'LANG="zh_CN. ...
- Intellij IDEA 中 使用 Git
前一段时间使用 Microsoft 的 Visual Studio Code 中使用 Git 对前端项目进行项目代码的开发提交. 使用后感觉挺好的,用的多了也觉得挺简单方便的. 现在需要在 Intel ...
- jQuery插件之路(一)——试着给jQuery的一个Carousel插件添加新的功能
前几日在网上看到了一个关于Carousel插件的教学视频,于是也顺便跟着学习着做了一下.但是在做完之后发现,在别的网站上面看到类似的效果要比现在做的这个要多一个功能,也就是在底下会有一些按钮,当鼠标放 ...
- 二、java实现多线程的方式?
一.同步?异步? 下面两幅图解释了同步异步. 二.实现多线程的方式 1.继承Thread package threaddemo; class CreateThreadDemo extends Thre ...
- RocketMQ中PullConsumer的启动源码分析
通过DefaultMQPullConsumer作为默认实现,这里的启动过程和Producer很相似,但相比复杂一些 [RocketMQ中Producer的启动源码分析] DefaultMQPullCo ...
- pythonday03数据类型(一)
今日内容 1.整型 2.布尔型 3.字符串 4.补充 5.作业讲解 6,pycharm自动生成头文件 1.整型(int) py2 int/long 32位电脑:-2147483648-21474836 ...
- SAP Special Fields in FAGLL03 transaction
https://wiki.scn.sap.com/wiki/display/ERPFI/Special+Fields+in+FAGLL03+transaction https://wiki.scn.s ...
- ArcGIS数据格式详解
- 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- 使用Cmake编译CEF时遇到Error in configuration process,project file may be invalid的解决办法
今天在用Cmake编译cef框架时,弹出了错误,如图: 可以排查一下几种原因: 1.在64位计算机编译32位程序 可以更换编译环境,或者下载64位版本来解决这个问题. 2.选择的Visual Stud ...