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. Day2-VIM(一):移动

    基础 字符移动 k 上移 k h 左移 h l l 右移 j j 下移 你也可以使用键盘上的方向键来移动,但这么做h j k l的存在就失去了意义 之所以使用h j k l来控制方向,其主要目的是让你 ...

  2. 有关UCOS_II在LPC1768上的应用

    https://www.cnblogs.com/chungshu/archive/2012/12/14/2818380.html

  3. 机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)

    一.scikit-learn 中的多项式回归 1)实例过程 模拟数据 import numpy as np import matplotlib.pyplot as plt x = np.random. ...

  4. Java程序开发中的简单内存分析

    首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...

  5. Spring学习八

    1: Tomcat容器四个等级? Container, Engine,  Servlet容器, Context 真正管理Servlet的容器是Context容器:一个context对应一个web工程. ...

  6. c# pictureBox 循环播放图片

    c# 1.遍历目录 查找图片 2.在 pictureBox 循环播放 public void PlayThread()//CMD_UpdateBtnStatus cmd { Int32 framera ...

  7. svn使用技巧一:更新、提交、资源库同步之间区别

    提交:是用本地文件覆盖服务器的文件,只有提交会导致服务器上发生变化 更新:只是把服务器上最新版本下载到客户端,规则如下: 1.如果你本地的某个文件没有修改过,而服务器上的这个文件别人已经提交过新版本, ...

  8. iOS按home键后程序的状态变化

    iOS 的应用里的几种状态: active: 应用在前台正常运行 background: 应用在后台,并且在执行代码. inactive: 这个状态是应用从一个状态向另一个状态的过渡 suspende ...

  9. centos7的xfs配置

    XFS是扩展性高.高性能的文件系统.也是rhel7/centos7的默认文件系统.XFS支持metadata journaling,这使其能从crash中更快速的恢复.它也支持在挂载和活动的状态下进行 ...

  10. 3.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:

    转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 概述 在文章:<[Spring学习笔记-MVC-3]SpringMVC返回Json数据-方 ...