Mole and Abandoned Mine

n点m条边的无向图,删除第i条边花费c[i],问1到n只有一条路径时所需要的最小花费? \(2\le n\le 15\) 。

我又A掉了一道zzs的题啦!

首先,我们观察1到n只有一条路径时,图是怎么样的。显然是一条1到n的链,链上的每个点都挂了很多子联通块,但这些子连通块互不连通。(exp:对于某些图论题,观察要求的东西,看看能否把它的性质描述出来。放到这道题里就是这条路径的性质。)

然后,用\(f[S][x]\)表示现在选入的点集是S,链的最后一个点是x。那么\(f[S][x]+c[x][u]\rightarrow f[S+\{u\}][u]\)(对应延伸链的长度),\(f[S][x]+p[Y]\rightarrow f[S|Y][x]\)(对应在x的集合中多加一个连通块)。

路人甲(我):哎哎哎这个dp不是把x的所有连通块排列都统计进去了吗,会错的啊!

大佬:你个sb,这道题又不是计数题。

exp*2:只有计数题才要求转移时每种方案统计一次。这种最优值题,方案被多统计并没有关系,反正是取个max。

#include <cstdio>
#include <cstring>
using namespace std; const int maxn=17, maxst=(1<<17)-1;
int n, m, sum, e[maxn][maxn], p[maxst], f[maxst][maxn]; inline int max(int x, int y){ return x<y?y:x; }
inline void up(int &x, int y){ x=max(x, y); } int main(){
scanf("%d%d", &n, &m); int a, b, c, ans=0;
memset(f, -1, sizeof(f)); //还是那个,不能让不合法状态成功转移
for (int i=0; i<m; ++i){
scanf("%d%d%d", &a, &b, &c); --a; --b;
e[a][b]=e[b][a]=c; sum+=c; }
for (int i=0; i<1<<n; ++i){
for (int j=0; j<n; ++j) if (i&(1<<j))
for (int k=0; k<n; ++k) if (i&(1<<k))
p[i]+=e[j][k];
p[i]>>=1; }
f[1][0]=0;
for (int i=1; i<(1<<n); ++i){ //当前集合
for (int j=0; j<n; ++j){ //当前挂的点
if (f[i][j]==-1) continue;
for (int k=0; k<n; ++k){ //枚举新在j后加的点
if (i&(1<<k)) continue;
if (e[j][k]==0) continue; //绝壁想不到的东西!果然转移要想清楚,限制一定要先治好,不能让不合法状态成功转移
up(f[i|(1<<k)][k], f[i][j]+e[j][k]);
}
int revi=(((1<<n)-1)^i)|(1<<j); //枚举新挂在j上的集合(要加上j以统计连j的边)
for (int k=revi; k; k=(k-1)&revi)
up(f[i|k][j], f[i][j]+p[k]);
}
}
for (int i=0; i<(1<<n); ++i)
up(ans, f[i][n-1]);
printf("%d\n", sum-ans);
return 0;
}

Mole and Abandoned Mine的更多相关文章

  1. AT2657 Mole and Abandoned Mine

    传送门 好神的状压dp啊 首先考虑一个性质,删掉之后的图一定是个联通图 并且每个点最多只与保留下来的那条路径上的一个点有边相连 然后设状态:\(f[s][t]\)代表当前联通块的点的状态为\(s\)和 ...

  2. 题解-AtCoder ARC-078F Mole and Abandoned Mine

    problem ATC-arc078F 题意概要:给定一个 \(n\) 点 \(m\) 边简单无向图(无自环无重边),边有费用,现切去若干条边,使得从 \(1\) 到 \(n\) 有且仅有一条简单路径 ...

  3. AtCoder arc078_d Mole and Abandoned Mine

    洛谷题目页面传送门 & AtCoder题目页面传送门 给定一个无向连通带权图\(G=(V,E),|V|=n,|E|=m\)(节点从\(0\)开始编号),要删掉一些边使得节点\(0\)到\(n- ...

  4. [atARC078F]Mole and Abandoned Mine

    注意到最终图的样子可以看作一条从1到$n$的路径,以及删去这条路径上的边后,路径上的每一个点所对应的一个连通块 考虑dp,令$f_{S,i}$表示当前1到$n$路径上的最后一个点以及之前点(包括$i$ ...

  5. AT2657 [ARC078D] Mole and Abandoned Mine

    简要题解如下: 记 \(1\) 到 \(n\) 的路径为关键路径. 注意到关键路径只有一条是解题的关键,可以思考这张图长什么样子. 不难发现关键路径上所有边均为桥,因此大致上是关键路径上每个点下面挂了 ...

  6. 【做题】arc078_f-Mole and Abandoned Mine——状压dp

    题意:给出一个\(n\)个结点的联通无向图,每条边都有边权.令删去一条边的费用为这条边的边权.求最小的费用以删去某些边使得结点\(1\)至结点\(n\)有且只有一条路径. \(n \leq 15\) ...

  7. AtCoder Regular Contest 078

    我好菜啊,ARC注定出不了F系列.要是出了说不定就橙了. C - Splitting Pile 题意:把序列分成左右两部分,使得两边和之差最小. #include<cstdio> #inc ...

  8. 【AtCoder】ARC078

    C - Splitting Pile 枚举从哪里开始分的即可 #include <bits/stdc++.h> #define fi first #define se second #de ...

  9. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

随机推荐

  1. webrtc doubango linphone

    1.doubango官网:http://www.doubango.org/ 2.doubango是一个开源的VOIP基础平台, 并能用于嵌入式和桌面系统的开源框架,该框架使用ANSCI-C编写,具有很 ...

  2. 嵌入式系统LINUX环境搭建

    Linux kernel Complier: http://supportopensource.iteye.com/blog/680483 sudo make mrproper         净化解 ...

  3. [cinder] volume type 使用简记

    cinder type-create sharecinder type-key share set volume_backend_name=GLUSTERFScinder type-create lo ...

  4. web.config中namespace的配置(针对页面中引用)

    1,在页面中使用强类型时: @model GZUAboutModel @using Nop.Admin.Models//命名空间(注意以下) 2,可以将命名空间提到web.config配置文件中去,此 ...

  5. Oracle 10g RAC全库flashback

    因业务原因,今天需要做一次全库flashback.以下是操作全过程: 1.确认主库是否能flashback到需要的时间点 在节点1上执行: SQL> alter session set nls_ ...

  6. 【Python环境】matplotlib - 2D 与 3D 图的绘制

    2015-10-30数据科学自媒体 类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数. 让我们加载它: from pylab import ...

  7. Struts2 全局结果集-全局result节点设置,package设置abstract=true的实现

    转自:https://blog.csdn.net/u013161278/article/details/41855273 如果我们所有的action均有可能跳到相同的页面,则不妨使用全局result. ...

  8. css垂直居中方法(一)

    第一种方法:首先用margin:0 auto实现水平居中,然后设置position:relative,设置top为50%(父元素高度的50%),然后设置margin-top:-150px(设置负值是因 ...

  9. WEB-INF与Webroot

    WEB-INF:放在WEB-INF下的资源是浏览器访问不到的,但后台程序能跳转到的,但重定向不行

  10. day70-oracle 13-数据字典

    实际上数据字典它就是表.这种表比较特殊,给它取个名字叫做数据字典.既然是表的话,它就是要存数据的.它存的是这些数据:用户有哪些权限,用户创建了哪些表,用户能够访问哪些表,这种信息跟员工表.部门表没有关 ...