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 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- iOS开发 8小时时差问题
今天调试遇到时间计算的问题,发现怎么算都会有差别,后来仔细观察,发现有8小时的时差…… 这篇文章解释的很好,用到了,因此记之. ios有关时间打印出来差8小时的问题
- 一道看似简单的go程序的深入分析
先上代码: func main() { var a [10]int for i := 0; i < 10; i++ { go func(i int) { for { a[i]++ } }(i) ...
- mule优缺点和MEL
优点1.开源 https://github.com/mulesoft/mule2.丰富的connector ,可以通过不同的形式来连接各个系统JMS.Web Service.JDBC.HTTP等3.c ...
- Selenium+java - 调用JavaScript操作
前言 在做web自动化时,有些情况selenium的api无法完成,需要通过第三方手段比如js来完成实现,比如去改变某些元素对象的属性或者进行一些特殊的操作,本文将来讲解怎样来调用JavaScript ...
- web渗透---第二天
协议常识 HTTP协议 百度百科的解释:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. 所有的WWW文件都必须遵守这个标准. ...
- S2:类的构造函数
类的构造函数构造函数名与类名形同,不返回任何值,主要完成对象的初始化工作. (1)在构造函数中,可以给属性设置默认值(2)this只带当前对象 (3)如果不给属性赋初始值,则会以默认值来填充.(4)如 ...
- Lua语言学习
1,语法 语句不用分号结尾 function ... end if .. else .. end 2, io库, string库, table库, OS库, 算术库, debug库 3, dofile ...
- Java中的魔法类-Unsafe
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资源.自主管理内存资源等,这些方法在提升Java运行效率.增强Java语言底层资源操作能 ...
- Spring Boot + Security + JWT 实现Token验证+多Provider——登录系统
首先呢就是需求: 1.账号.密码进行第一次登录,获得token,之后的每次请求都在请求头里加上这个token就不用带账号.密码或是session了. 2.用户有两种类型,具体表现在数据库中存用户信息时 ...
- mysql中防止sql注入
什么是sql注入 图片来源:百度百科 python 操作mysql产生sql注入问题 不用ORM框架,框架中已经集成了防范sql注入的功能,使用pymysql实践一下: # 导入pymysql模块 i ...