\(\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的更多相关文章

  1. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  2. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  3. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  4. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  5. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  6. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  7. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

  8. Loj #6069. 「2017 山东一轮集训 Day4」塔

    Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...

  9. Loj #6073.「2017 山东一轮集训 Day5」距离

    Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...

随机推荐

  1. idea 更换 maven ,并更换阿里镜像

    1 ctrl + alt + s 打开设置, 找到Maven 修改maven包的地址,然后修改settings.xml 注意了,有时候repository没有,那么需要在settings.xml配置r ...

  2. RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】

    1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...

  3. centos7 重定向符号

    这篇只记录使用对应的使用方法,原理后期更新 >> 追加输出 <<追加输入 >输出 <输入 将正确和错误信息同事保留到一个文件 echo "this is ...

  4. CentOS6.5安装CM5.13

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6610650059971232269/ 安装好虚拟机(2个节点) YUM源已安装好.系统版本CentOS6.5.ja ...

  5. SYCOJ798Biorhythms

    https://oj.shiyancang.cn/Problem/798.html #include<bits/stdc++.h> using namespace std; typedef ...

  6. 大数据安全与RANGER学习和使用

    概述 再说ranger之前需要明白一下大数据的安全体系的整体介绍,安全体系其实也就是权限可控,先说说权限:权限管理的目标,绝对不是简单的在技术层面建立起用户,密码和权限点的映射关系这么简单的事,更重要 ...

  7. spring-data-jpa ----OneToMany 一对多

    环境搭建 导入依赖  maven3.6.3 <properties> <spring.version>5.2.5.RELEASE</spring.version> ...

  8. HashMap原理及源码分析

    HashMap 原理及源码分析 1. 存储结构 HashMap 内部是由 Node 类型的数组实现的.Node 包含着键值对,内部有四个字段,从 next 字段我们可以看出,Node 是一个链表.即数 ...

  9. Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  10. Java中运算符及其优先级、自动类型提升、类型转化

                   自动类型提升的规则 两个操作数中有一个为double型的数据,计算结果提升为double. 两个操作数中无double型,有一个float,计算结果自动提升为float. ...