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. 第十四届华中科技大学程序设计竞赛决赛同步赛 A - Beauty of Trees

    A - Beauty of Trees 题意: 链接:https://www.nowcoder.com/acm/contest/119/A来源:牛客网 Beauty of Trees 时间限制:C/C ...

  2. Celery-4.1 用户指南: Security (安全)

    简介 虽然Celery 编写的时候考虑了安全,但是它仍然应该认为是一个不安全的组件. 依据安全策略,你可以采取几个步骤使得你的 Celery 安装更加安全. 关注的领域 消息中间件 保障消息中间件不受 ...

  3. appium_python-测试报告模板话化

    我们用python拓展模板 HTMLTestRunner.py python3 要自己重新改写下输出输入接口,可直接下载 改好的 地址 链接:http://pan.baidu.com/s/1hsOBw ...

  4. ORACLE——日期时间格式化参数详解 之三

    2.20 Y,YYY 返回有逗号分隔显示的年 SQL> select to_char(SYSTIMESTAMP,'Y,YYY') from dual; TO_CHAR(SYSTIMESTAMP, ...

  5. 10-28SQLserver基础--数据库管理器(基础操作)

    C#基础--数据库(用来存储大量的数据) 操作数据库文件唯一途径 SQL server,结构化查询语言简称SQL. Analysis services:分析挖掘数据 Reporting service ...

  6. namenode和datanode机制

    转自:https://www.cnblogs.com/DarrenChan/p/6416043.html?utm_source=itdadao&utm_medium=referral 首先我们 ...

  7. oracle 启动停止过程

    oracle 主要由两部分组成:instance和database .instance是指一组后台进程/线程和一块共享内存区域,而database是指存储在磁盘上的一组物理文件. 数据库启动包括三个步 ...

  8. awk简要使用

    1          前言 awk是Unix环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于短消息来说,比如处理话单文件,使用awk就非常方便 ...

  9. linq组合查询时属性扩展问题

    学习linq的过程中,做一个表格的条件查询并且分页显示.显示的出的数据需要经过属性拓展来实现将需要给用户看的值显示出来. 后台绑定数据时用的是上下文---- if(!ispostback){ usin ...

  10. TaikrSpaceShooterStartKit.unitypackage包下载地址

    有好多教程里面没有资源包,现在加密分享给大家 unity4.*  链接: https://pan.baidu.com/s/1XMo2zVpV3ZhkNZKOb6H0yw 密码: tqnt unity5 ...