[AGC036D] Negative Cycle 题解

很有 AT 风格的一道题,神秘的差分约束。


考虑无负环等价于差分约束有解,所以我们给每个点都附一个权值 \(x_i\)

因为初始边不能删,所以 \(x_i-x_{i+1}\ge 0\)。我们设 \(q_i=x_i-x_{i+1}\ge 0\)

由于无负环等价于环上正边数量大于负边,所以 \(i<j\) 时,必有 \(x_i-x_j=\sum\limits_{k=i}^{j-1}q_k\ge 1\);反之则有 \(x_j-x_i=\sum\limits_{k=j}^{i-1}q_k\le 1\)

因为我们想要尽可能的保留下每一条边,所以只有在 \(\sum\limits_{k=i}^{j-1}q_k=0\) 时删除负边,在 \(\sum\limits_{k=j}^{i-1}q_k\ge 2\) 时删除正边。那么这个问题就转化为了构造最优的 \(q\) 数组。

首先由于尽可能保留边,所以 \(q_i\in\{0,1\}\)。然后就有经典 \(dp\) 了。

\(dp_{i,j}\) 表示最后一个 \(1\)\(i\) 位置,倒数第二个 \(1\)\(j\) 位置时的最优解。考虑可以从 \(dp_{j,k}\) 推导过来。那么此时新增的值有:

  1. \(i+1,j+1\) 之间的所有负边。
  2. \(j+2\)\(i\) 间所有点向 \(1\)\(k\) 间连的所有正边。
  3. \(i+1\) 这个点向 \(1\)\(j\) 间连的所有正边。

系数可以通过二维前缀和简单求解。之所以有这么多 \(+1,+2\),是因为我们的 \(q\) 数组是差分数组,要比原数组长度少一。时间复杂度 \(O(n^3)\)。(感觉有很强的单调性,能不能使用斜率优化 \(dp\) 优化到 \(O(n^2)\)?)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=505;
int n,dp[N][N],a[N][N],b[N][N],ans;
int as(int xa,int xb,int ya,int yb){return a[xb][yb]-a[xb][ya-1]-a[xa-1][yb]+a[xa-1][ya-1];
}int bs(int xa,int xb,int ya,int yb){return b[xb][yb]-b[xb][ya-1]-b[xa-1][yb]+b[xa-1][ya-1];
}signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0),cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<i;j++) cin>>a[i][j];for(int j=i+1;j<=n;j++) cin>>b[i][j];}for(int i=1;i<=n+1;i++)for(int j=1;j<=n+1;j++){a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];}ans=bs(1,n,1,n);for(int i=1;i<n;i++){for(int j=1;j<i;j++){dp[i][j]=1e18;for(int k=0;k<j;k++)dp[i][j]=min(dp[i][j],dp[j][k]+as(j+2,i,1,k));dp[i][j]+=as(i+1,i+1,1,j)+bs(j+1,i,j+1,i);ans=min(ans,dp[i][j]+bs(i+1,n,i+1,n)+as(i+2,n,1,j));}dp[i][0]=bs(1,i,1,i);ans=min(ans,dp[i][0]+bs(i+1,n,i+1,n));}return cout<<ans,0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

T+0量化:JAVA接入Level2高频行情(附Python代码)

去年在知乎分享过一个网格策略,评论区全是"代码能跑通但实盘不敢用"的留言。当时我也一样——用第三方平台回测美滋滋,一到实盘就怂:行情延迟3秒、API调用次数受限、策略逻辑被平台规则卡脖子…直到把整套系统搬回本地,才发现自建交易系统的快感就像从合租屋搬进…

制作一个简单的带有3D打印部件的四足蜘蛛机器人

在这个项目中,我将向您展示如何使用3D打印部件制作一个简单的4腿行走蜘蛛机器人。该设计主要由上下板、臂接插件、腿和伺服支架五个部分组成。机器人的4条腿由4个手臂部分和4个腿部分组成。机器人的运动总共使用了8个业余伺服电机,4个在手臂上,4个在腿上。在电路方面,首选E…

统计学习之数据挖掘(结构数据)

统计学习之数据挖掘(结构数据):降维聚类关联度分析分类神经网络

2024 腾讯游戏安全大赛 mobile 初赛 wp

找关键结构体 https://www.cnblogs.com/revercc/p/17641855.html 找GWORLD https://bbs.kanxue.com/thread-280042.htm可以发现是 TEXT包裹的,utf-16编码,ida alt + b搜索 53 00 65 00 61 00 6D 00 6C 00 65 00 73 00 73 00 54 00 72 00即可网上翻即可找到 GWorld对应地址: 0…

制造业订单处理烦恼多,日事清 OTD 管理为您排忧解难

你是不是经常因为接单和交货时间差太大而焦头烂额?今天我们就结合制造业OTD管理,带您了解如何应用日事清进行订单交付全周期管理。日事清可以帮你设定精细的流程,从接单到发货,清晰可控地帮你解决以上烦心事。在制造业里打拼,每天都得面对各种烦心事,比如订单处理慢、生产…

如何在SSD1306上显示动态表情符号位图

解锁您的SSD1306上充满活力的视觉效果!学习毫不费力地显示动态表情符号位图,并以风格增强您的项目。 在本教程中,我们将通过使用PCBX在线模拟环境在SSD1306 OLED显示器上显示位图图像的过程。本教程将介绍设置PCBX模拟,格式化位图数据,配置显示大小和管理图像延迟。步骤1:…

redis基础数据结构——ZipList

ZipList 基于特殊写法实现的双端链表,由一系列特殊编码的连续内存块组成,可以像deque一样在双端压入/弹出,并且时间复杂度在O(1) 整体ZL结构如下zlbytes(uint32):当前zl总的byte数。 zltail(uint32):尾结点的offset,指向的是最后一个entry的起始地址。 zllen(uint16):记…

day:28 postman——环境变量(依赖,关联接口)

一.接口的环境变量 (1)定义变量 可以将需要填写的值设为变量 变量设置:{{}}(2)添加环境变量 方法一:方法二:(3)查看环境变量(4)选择环境,执行二.依赖接口 先登录接口成功,生成cookie值,才能让后面接口依赖 cookie值是保持会话 查看cookie值方法 方法一:方法二:…

L1.1 技术和产品准备度

L1.1 技术和产品准备度 技术和产品准备度 技术与产品的演进 ​ 上面这张图展示了如何在技术尚未完全成熟时,启动产品开发,以及技术如何随着新需求或洞察逐步演进,并支持产品的更新换代。产品1.0:由先前研发的的技术3支撑,加上“产品开发可以在预期的技术开发成果的基础上提…

从故障响应到客户信赖:华为ITR流程的五大核心步骤与实战案例

华为究竟是如何在与西方巨头的激烈竞争中崭露头角、脱颖而出的呢?答案是:凭借卓越的服务。今天我们来探讨一下华为是如何通过卓越的服务赢得全球市场的。 一、华为的三件大事 华为前高管费敏曾经总结过,华为的业务可以分成三件大事:1. 开发产品:这就是 IPD 流程,负责从有…

提升生产效率的关键: ethercat转TCPIP智能通信

大家好。最近在数据互联互通方面,我们迎来了一个重要的突破。作为生产管理系统的核心组成部分,数据互联互通一直是一个亟待解决的挑战。我们知道,EtherCAT和TCP/IP是两种不同的通信协议,它们之间的互通性一直存在问题。不过,现在有一款新产品值得关注,这款产品能够实现Et…

Trae初体验

Trae(国际版)的Ai搭载Claude-3.7-Sonnet(完全免费且速度很快)和DeepSeek-R1以及V3(不存在服务器繁忙)以及GPT-4o Trae国服的Ai搭载DouBao和DeepSeek。用Claude-3.7-Sonnet 写一个简易的贪吃蛇小游戏:这个贪吃蛇游戏包含以下功能:使用方向键控制蛇的移动 吃到食物会增加长度和…