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\) ...
随机推荐
- idea 更换 maven ,并更换阿里镜像
1 ctrl + alt + s 打开设置, 找到Maven 修改maven包的地址,然后修改settings.xml 注意了,有时候repository没有,那么需要在settings.xml配置r ...
- RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...
- centos7 重定向符号
这篇只记录使用对应的使用方法,原理后期更新 >> 追加输出 <<追加输入 >输出 <输入 将正确和错误信息同事保留到一个文件 echo "this is ...
- CentOS6.5安装CM5.13
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6610650059971232269/ 安装好虚拟机(2个节点) YUM源已安装好.系统版本CentOS6.5.ja ...
- SYCOJ798Biorhythms
https://oj.shiyancang.cn/Problem/798.html #include<bits/stdc++.h> using namespace std; typedef ...
- 大数据安全与RANGER学习和使用
概述 再说ranger之前需要明白一下大数据的安全体系的整体介绍,安全体系其实也就是权限可控,先说说权限:权限管理的目标,绝对不是简单的在技术层面建立起用户,密码和权限点的映射关系这么简单的事,更重要 ...
- spring-data-jpa ----OneToMany 一对多
环境搭建 导入依赖 maven3.6.3 <properties> <spring.version>5.2.5.RELEASE</spring.version> ...
- HashMap原理及源码分析
HashMap 原理及源码分析 1. 存储结构 HashMap 内部是由 Node 类型的数组实现的.Node 包含着键值对,内部有四个字段,从 next 字段我们可以看出,Node 是一个链表.即数 ...
- Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Java中运算符及其优先级、自动类型提升、类型转化
自动类型提升的规则 两个操作数中有一个为double型的数据,计算结果提升为double. 两个操作数中无double型,有一个float,计算结果自动提升为float. ...