[NOIP2017 TG D2T2]宝藏
题目大意:给定一个有重边,边有权值的无向图。从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径。费用的计算公式为:所有边的费用之和。而边$x->y$的费用就为:$y$到初始点的之间点的个数(包括起始点) $\times$ 边权。
题解:状压$DP$,令$f_{i,j}$表示当前深度为$i$,状态为$j$的最小花费
$$f_{i,s}=f_{i-1,t}+g_{s,t}\times(i−1)$$
再开一个数组$c_{s,i}表示状态$s$挖到点$i$的最小花费(不考虑深度)
用边权更新$c$数组,再用$c$数组更新$g$数组即可
卡点:1.$c$数组第二维开太小
C++ Code:
#include <cstdio>
#include <cstring>
#define lb(x) (x & -x)
#define maxn 13
using namespace std;
const int inf = 0x3f3f3f3f;
int n, m, U, ans = inf;
int e[maxn][maxn], c[maxn][1 << maxn | 3];
int g[1 << maxn | 3][1 << maxn | 3], f[maxn][1 << maxn | 3];
inline void getmin(int &a, int b) {if (a > b) a = b;}
inline int min(int a, int b) {return a < b ? a : b;}
int main() {
scanf("%d%d", &n, &m); U = 1 << n;
if (n == 1) {
puts("0");
return 0;
}
memset(e, 0x3f, sizeof e);
for (int i = 0; i < m; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
e[a][b] = e[b][a] = min(c, e[a][b]);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j < U; j++) {
c[i][j] = inf;
if (!(j & (1 << i - 1))) {
for (int k = 1; k <= n; k++) {
if (j & (1 << k - 1)) getmin(c[i][j], e[i][k]);
}
}
}
}
for (int i = 1; i < U; i++) {
for (int j = i & i - 1; j; j = i & j - 1) {
int tmp = i ^ j;
for (int k = 1; k <= n; k++) {
if (tmp & (1 << k - 1)) {
g[i][j] += c[k][j];
if (g[i][j] > inf) g[i][j] = inf;
}
}
}
}
memset(f, 0x3f, sizeof f);
for (int i = 1; i <= n; i++) f[1][1 << i - 1] = 0;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < U; j++) {
for (int k = j & j - 1; k; k = j & k - 1) {
int tmp = inf;
if (g[j][k] ^ inf) tmp = g[j][k] * (i - 1);
if (f[i - 1][k] ^ inf) getmin(f[i][j], f[i - 1][k] + tmp);
}
}
getmin(ans, f[i][U - 1]);
}
printf("%d\n", ans);
return 0;
}
[NOIP2017 TG D2T2]宝藏的更多相关文章
- [NOIP2017 TG D2T2]宝藏(模拟退火)
题目大意:$NOIPD2T2$宝藏 题解:正常做法:状压DP .这次模拟退火,随机一个排列,$O(n^2)$贪心按排列的顺序加入生成树 卡点:没开$long\;long$,接受较劣解时判断打错,没判$ ...
- 【NOIP题解】NOIP2017 TG D2T3 列队
列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...
- [NOIP2018 TG D2T2]填数游戏
题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...
- NOIP2017 D2T2宝藏
考场上写的prim一遍过了大样例也没想什么别的,反例也没举出来. 后来才知道由于要乘上深度所以无法贪心. 正解是状压但我不会,考后一个爆搜碾过去了. 心凉. #include<bits/stdc ...
- NOIP2017 D2T2 宝藏
洛谷P3959 其实就是一道暴力搜索题……只是需要一个状态压缩的剪枝比较难想而已 这根本不叫dfs!只是一个递归而已……开始就被dfs坑了 思路: 首先一个基本的预处理 数据范围n≤12,m≤5000 ...
- noip2017 TG 游记
嗨小朋友们大家好,还记得我是谁吗?我就是为GG代言的蒟蒻--xzz 今天呐我特别的要向HN的dalao们ZJ的巨佬们还有全国的神犇们问声好 为什么呢因为我们在2017年11月份来到了吔屎的长沙理工大学 ...
- [NOIP2017 TG D2T3]列队
题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...
- NOIP2017[提高组] 宝藏 题解
解析 我们观察范围可以发现n非常的小,(一般来说不是搜索就是状压dp)所以说对于这题我们可以用记忆化搜索或者dp,我们发现起点不同那么最终答案也就不同,也就是说答案是跟起点有关的,于是我们便可以想到去 ...
- NOIP2017 Day2 T2 宝藏(状压DP)
$O(n*3^n)$好难想...还有好多没见过的操作 令$f[i][j]$表示最深深度为i,点的状态为j的最小代价,每次枚举状态$S$后,计算$S$的补集里的每个点与S里的点的最小连边代价,再$O(3 ...
随机推荐
- 阿里云SSL证书到期(续期)图文教程
今天公司项目突然报错 后来查询是SSL证书过期了.友情提示: 证书产品仅支持新签发.不支持续费.证书到期前需在阿里云SSL证书控制台重新购买和申请证书. 登录阿里云控制台,点击产品与服务,在搜索框搜索 ...
- filter-policy和AS-PATH-FILTER过滤BGP路由条目
Filter-policy过滤BGP路由条目 一:根据项目需求搭建好拓扑图如下: 二:配置 1:对项目图做理论分析,首先RT1和RT2属于EBGP(不同自治系统之间的直连路由),而RT2和RT3属于I ...
- Asp.Net Core 生成图形验证码
前几天有朋友问我怎么生成图片验证码,话不多说直接上代码. 支持.NET CORE开源.助力.NET Core社区发展. using System; using System.IO; using Sys ...
- node 动态页面渲染
代码: 'use strict' const express = require('express'); const consoldiate = require('consolidate'); con ...
- python2.7练习小例子(二十八)
28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...
- vue2018年5月报错No parser and no file path given
mac电脑直接: rm -rf node_modules rm package-lock.json npm install npm install prettier@~1.12.1 执行完这四个命令, ...
- 2426: [HAOI2010]工厂选址
2426: [HAOI2010]工厂选址 链接 代码: /* 贪心: 奇妙!!!!! 因为所有的煤矿不是给新厂,就是给旧厂(而且旧厂的得到b) 为了使费用最小,感性的理解,那么一个煤矿给哪个厂,取决于 ...
- Hibernate-ORM:06.Hibernate中三种状态
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flu ...
- Bash中使用MySQL导入导出CSV格式数据[转]
转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_inf ...
- 30分钟 带你浅入seajs源码
上个星期写了浅入requirejs的, 大家都知道 require是AMD规范(Asynchronous Module Definition) 来 今天我们一起看看 CMD规范(Common Mo ...