AT2657 [ARC078D] Mole and Abandoned Mine
简要题解如下:
记 \(1\) 到 \(n\) 的路径为关键路径。
注意到关键路径只有一条是解题的关键,可以思考这张图长什么样子。
不难发现关键路径上所有边均为桥,因此大致上是关键路径上每个点下面挂了很多个连通块。
基于这张图的形态涉及一个 \(dp\),令 \(f_{i, S}\) 表示当前只考虑 \(S\) 这个集合,当前在关键路径上走到的点为 \(i\) 留下的最大边权。
转移有两种,一种是直接考虑在关键路径上往后扩展一个点 \(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的更多相关文章
- Mole and Abandoned Mine
Mole and Abandoned Mine n点m条边的无向图,删除第i条边花费c[i],问1到n只有一条路径时所需要的最小花费? \(2\le n\le 15\) . 我又A掉了一道zzs的题啦 ...
- AT2657 Mole and Abandoned Mine
传送门 好神的状压dp啊 首先考虑一个性质,删掉之后的图一定是个联通图 并且每个点最多只与保留下来的那条路径上的一个点有边相连 然后设状态:\(f[s][t]\)代表当前联通块的点的状态为\(s\)和 ...
- 题解-AtCoder ARC-078F Mole and Abandoned Mine
problem ATC-arc078F 题意概要:给定一个 \(n\) 点 \(m\) 边简单无向图(无自环无重边),边有费用,现切去若干条边,使得从 \(1\) 到 \(n\) 有且仅有一条简单路径 ...
- AtCoder arc078_d Mole and Abandoned Mine
洛谷题目页面传送门 & AtCoder题目页面传送门 给定一个无向连通带权图\(G=(V,E),|V|=n,|E|=m\)(节点从\(0\)开始编号),要删掉一些边使得节点\(0\)到\(n- ...
- [atARC078F]Mole and Abandoned Mine
注意到最终图的样子可以看作一条从1到$n$的路径,以及删去这条路径上的边后,路径上的每一个点所对应的一个连通块 考虑dp,令$f_{S,i}$表示当前1到$n$路径上的最后一个点以及之前点(包括$i$ ...
- 【做题】arc078_f-Mole and Abandoned Mine——状压dp
题意:给出一个\(n\)个结点的联通无向图,每条边都有边权.令删去一条边的费用为这条边的边权.求最小的费用以删去某些边使得结点\(1\)至结点\(n\)有且只有一条路径. \(n \leq 15\) ...
- AtCoder Regular Contest 078
我好菜啊,ARC注定出不了F系列.要是出了说不定就橙了. C - Splitting Pile 题意:把序列分成左右两部分,使得两边和之差最小. #include<cstdio> #inc ...
- 【AtCoder】ARC078
C - Splitting Pile 枚举从哪里开始分的即可 #include <bits/stdc++.h> #define fi first #define se second #de ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
随机推荐
- [opencv]approxDP多边形逼近获取四边形轮廓信息
#include "opencv2/opencv.hpp" #include <iostream> #include <math.h> #include & ...
- 查收新年礼物丨DevEco Studio 3.0 Beta2发布,20个新变化详解
HUAWEI DevEco Studio是开发HarmonyOS应用和原子化服务的一站式集成开发环境(IDE),为开发者提供工程模板创建.开发.编译.调试.发布等功能. 2021年12月31日,新版本 ...
- 简单的制作ssl证书,并在nginx和IIS中使用
2020年最后一篇博文收官,提前祝各位园友新年快乐 现在的后端开发,动不动就是需要https,或者说是需要ssl证书,既然没有正版的证书,那么我们只能自己制作ssl的证书了. 说明:证书的制作采用的是 ...
- supervisor安装与基本使用
supervisor简介 一般的,我们部署一个项目,我们希望它能在挂了之后能自动重启,这时就要用守护进程了,而supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程 ...
- CSS基础 精灵图的使用
使用步骤1.创建盒子 <div class="one"></div> 2.使用PxCook量取图标大小,将图标的宽高设置成为盒子的宽高 ...
- 初识python:hello world 仪式感
python print 函数(在python中,不区分 ' ' 和 " "): print('hello world') 或者 print("hello wrold& ...
- 怎样从 bat 批处理文件调用 PowerShell 脚本
https://stackoverflow.com/questions/19335004/how-to-run-a-powershell-script-from-a-batch-file https: ...
- 第10组 Beta冲刺 (3/5)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018630.html ·作业博客:https://edu.cnblogs.co ...
- antd的table组件设置Column的width列宽度不生效问题
超长连续字段(长数字和长单词) 破坏表格布局的问题(即使你指定了列的宽度也会被挤开),之前组件内默认加过 word-break: break-word; 去纠正此类布局,又会引起其他的问题. 所以最好 ...
- POJ 2456 Aggressive cows(贪心 + 二分)
原题链接:Aggressive cows 题目大意:农夫 建造了一座很长的畜栏,它包括 个隔间,这些小隔间依次编号为. 但是, 的 头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争 ...