Solution -「AGC 036D」「AT 5147」Negative Cycle
\(\mathcal{Descriprtion}\)
Link.
在一个含 \(n\) 个结点的有向图中,存在边 \(\lang i,i+1,0\rang\),它们不能被删除;还有边 \(\lang i,j,-1\rang~(i<j)\) 和 \(\lang i,j,1\rang~(i>j)\),删除一条边的代价为 \(a_{i,j}\)。求使得图无负环的最小删边代价和。
\(n\le500\)。
\(\mathcal{Solution}\)
直接将原图看做一个差分约束模型,或说把 无负环 转化成 存在从 \(1\) 到 \(n\) 的最短路。设 \(x_i\) 表示 \(1\) 到 \(i\) 的最短路,那么首先必然有 \(x_i\ge x_{i+1}\),令 \(d_i=x_{i+1}-x_i\ge0\),考虑一条可删除的 \(\lang i,j\rang\) 被 \(\{d_{n-1}\}\) 影响的情况:
- \(\lang i,j,-1\rang\):\(x_i\ge x_j+1\),说明当 \(\sum_{k=i}^{j-1}d_k=0\) 时,此边需要删去;
- \(\lang i,j,1\rang\):\(x_i\ge x_j-1\),说明当 \(\sum_{k=j}^{i-1}d_k\ge2\) 时,此边需要删去。
此外已证,\(d_k\in\{0,1\}\) 必然能取到最优方案。所以令 \(f(i,j)\) 表示最近一个是 \(d_i=1\),前一个是 \(d_j=1\) 时,使结点 \(1\sim i+1\) 之间的边符合要求的最小删除代价和,预处理 \(+1\) 和 \(-1\) 边删除代价的二维前缀和,枚举前驱状态 \(f(j,k)\),可做到 \(\mathcal O(n^3)\) 转移。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#include <cstring>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
typedef long long LL;
template<typename Tp>
inline Tp imax( const Tp a, const Tp b ) { return a < b ? b : a; }
template<typename Tp>
inline void chkmin( Tp& a, const Tp b ) { b < a && ( a = b ); }
const int MAXN = 500;
const LL LINF = 0x3f3f3f3f3f3f3f3f;
int n;
LL wp[MAXN + 5][MAXN + 5], wn[MAXN + 5][MAXN + 5];
LL f[MAXN + 5][MAXN + 5];
inline LL negS( int a, const int b, int p, const int q ) {
a = imax( a, 1 ), p = imax( p, 1 );
return a > p || b > q ? 0 :
wn[p][q] - wn[p][b - 1] - wn[a - 1][q] + wn[a - 1][b - 1];
}
inline LL posS( int a, const int b, int p, const int q ) {
a = imax( a, 1 ), p = imax( p, 1 );
return a > p || b > q ? 0 :
wp[p][q] - wp[p][b - 1] - wp[a - 1][q] + wp[a - 1][b - 1];
}
int main() {
scanf( "%d", &n );
rep ( i, 1, n ) rep ( j, 1, n ) {
if ( i < j ) scanf( "%lld", &wn[i][j] );
else if ( i > j ) scanf( "%lld", &wp[i][j] );
wn[i][j] += wn[i - 1][j] + wn[i][j - 1] - wn[i - 1][j - 1];
wp[i][j] += wp[i - 1][j] + wp[i][j - 1] - wp[i - 1][j - 1];
}
LL ans = negS( 1, 1, n, n );
memset( f, 0x3f, sizeof f ), f[0][0] = 0;
rep ( i, 1, n - 1 ) rep ( j, 0, i - 1 ) {
rep ( k, 0, imax( j - 1, 0 ) ) {
chkmin( f[i][j], f[j][k] + negS( j + 1, j + 1, i, i )
+ posS( j + 2, 1, i + 1, k )
+ posS( i + 1, k + 1, i + 1, j ) );
}
chkmin( ans, f[i][j] + negS( i + 1, i + 1, n, n )
+ posS( i + 2, 1, n, j ) );
}
printf( "%lld\n", ans );
return 0;
}
Solution -「AGC 036D」「AT 5147」Negative Cycle的更多相关文章
- Solution -「CTS 2019」「洛谷 P5404」氪金手游
\(\mathcal{Description}\) Link. 有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法
用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- Loj #6069. 「2017 山东一轮集训 Day4」塔
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...
- Loj #6073.「2017 山东一轮集训 Day5」距离
Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...
随机推荐
- win10中查看开关机时间及查看admin的RID的方法
原文链接: https://www.toutiao.com/i6772133439593251339/ 打开系统的注册表 键盘输入win+r组合键出现运行窗口命令 输入regedit 按回车键,进入注 ...
- docker安装easymock
一.准备 参考docker安装mongodb与redis文章 二.拉取 docker pull docker.io/easymock/easymock 三.启动 1.创建配置目录 mkdir -f / ...
- vue 使用mock来模拟数据
首先,需要安装mock npm install mockjs --save-dev 在main.js中引入mock mock文件写法如下: const Mock = require('mockjs') ...
- doT.js模板用法
前提:引入doT.min.js: <script type="text/javascript" src="js/jquery.js"></sc ...
- 《剑指offer》面试题03. 数组中重复的数字
问题描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- Windows和Linux(Centos7)下安装Nginx
安装Nginx 这篇记录只不过做了一个简单总结,如果对这块没什么概念的话可以看一下知乎的这篇文章 https://zhuanlan.zhihu.com/p/83890573 window下安装 win ...
- 使用Xamarin开发移动应用示例——数独游戏(一)项目的创建与调试
最近项目中需要移动客户端,由于团队基本上使用.Net产品线,所以决定使用Xmarin进行开发,这样技术路线统一,便于后期维护.官网上是这样介绍的" Xamarin 允许你使用 .NET 代码 ...
- 🏆【Alibaba中间件技术系列】「Nacos技术专题」服务注册与发现相关的原理分析
背景介绍 前几篇文章介绍了Nacos配置中心服务的能力机制,接下来,我们来介绍Nacos另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服务是非常 ...
- Servlet-概念及实现一个Servlet程序
Servlet技术 一,Servlet概念 1,Servlet是JavaEE规范之一.规范就是接口 2,Servlet就是JavaWeb三大组件之一.三大组件分别是:Servlet程序.Filter过 ...
- 集合框架-TreeSet集合
1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 ...