题目链接

https://atcoder.jp/contests/agc036/tasks/agc036_d

题解

这都是怎么想出来的啊。。目瞪口呆系列。。

第一步转化至关重要: 一张图中不存在负环意味着什么?
不存在负环就存在最短路,我们可以给每个点分配一个权值\(p_i\)(相当于从\(1\)号到该点的最短路,点从\(1\)开始标号)满足对于任何边\((i,j)\)有\(p_j\ge p_i+w(i,j)\).
然后我们令\(q_i=p_i-p_{i+1}\), 那么由于边权都是\(1\)或者\(-1\)并且存在不能删的\(0\)边, 显然有\(q\)数组的值都是\(0\)或者\(1\).
约束变成了: 对于每条边\((i,j)\ (i>j)\)有\(\sum^{i-1}_{k=i}q_k\le 1\), 对于每条边\((i,j)\ (i<j)\)有\(\sum^{j-1}_{k=i}q_k\ge 1\).
所以问题就被转化成了: 你要给每个\(1\)到\((n-1)\)中的点\(q_i\)分配一个\(0\)或者\(1\)的权值,再删掉所有不满足约束条件的边,使得总代价最小!
天哪,这也太神仙了吧……

然后就是一个很容易的DP了,设\(dp[i][j]\)表示安排好前\(i\)位的\(q\)值,且强行令\(q_i=1\), 上一个为\(1\)的位置是\(j\)
那么考虑枚举\(k\), \(dp[i][j]\)转移到\(dp[k][i]\),同时删去不合法的边
对于\(a>b\)的边\((a,b)\), 要删掉所有满足\(j<b\le i<x<a\)的边
对于\(a<b\)的边\((a,b)\), 要删掉所有满足\(j<i<a<b\le x\)的边
然后这个很容易使用二维前缀和优化,时间复杂度\(O(n^3)\).

啊啊啊人类智慧……

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<iostream>
#define llong long long
using namespace std;inline int read()
{int x=0; bool f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=0;for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');if(f) return x;return -x;
}const int N = 500;
llong a[N+3][N+3];
llong s[2][N+3][N+3];
llong dp[N+3][N+3];
int n;void update(llong &x,llong y) {x = x<y?x:y;}llong getsum(int typ,int lx,int rx,int ly,int ry)
{return s[typ][rx][ry]-s[typ][lx-1][ry]-s[typ][rx][ly-1]+s[typ][lx-1][ly-1];
}int main()
{scanf("%d",&n);for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){if(j==i) continue;scanf("%lld",&a[i][j]);}}for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){if(i<j) {s[0][i][j] = a[i][j];}s[0][i][j] += s[0][i][j-1];}for(int j=1; j<=n; j++) s[0][i][j] += s[0][i-1][j];}for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){if(i>j) {s[1][i][j] = a[i][j];}s[1][i][j] += s[1][i][j-1];}for(int j=1; j<=n; j++) s[1][i][j] += s[1][i-1][j];}memset(dp,42,sizeof(dp)); dp[0][0] = 0ll;for(int i=0; i<=n; i++){for(int j=0; j<max(i,1); j++){for(int k=i+1; k<=n; k++){llong tmp = dp[i][j]+getsum(1,k+1,n,j+1,i)+getsum(0,i+1,k,i+1,k);update(dp[k][i],tmp);}}}llong ans = dp[n][1];for(int i=1; i<=n; i++) update(ans,dp[n][i]);printf("%lld\n",ans);return 0;
}

AtCoder AGC036D Negative Cycle (图论、DP)相关推荐

  1. AtCoder AGC030F Permutation and Minimum (DP、计数)

    题目链接 https://atcoder.jp/contests/agc030/tasks/agc030_f 题解 首先序列里会有\(a_{2i-1}\)和\(a_{2i}\)都不为\(-1\)的情况 ...

  2. AtCoder AGC019E Shuffle and Swap (DP、FFT、多项式求逆、多项式快速幂)

    题目链接 https://atcoder.jp/contests/agc019/tasks/agc019_e 题解 tourist的神仙E题啊做不来做不来--这题我好像想歪了啊= =-- 首先我们可以 ...

  3. atcoder A - Frog 1(DP)

    A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...

  4. 【AtCoder - 4244 】AtCoder Express 2 (区间dp 或 暴力枚举,思维)

    题干: In Takahashi Kingdom, there is a east-west railroad and N cities along it, numbered 1, 2, 3, ... ...

  5. Atcoder 077E - guruguru(线段树+dp)

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_c 分析:如果某条线段包含x,显然应该先按一下到x,再从x走,反之必然是直接走过去,很容易想到用d ...

  6. 【QBXT】学习笔记——Day3/4图论+dp

    继续上传一波笔记吧. Day3 1.16AM 今天讲图论,以习题为主. 开篇水题: 给一幅图,若删去一个点后变成一棵树,则这个点合法.问哪些点合法. 思路根据树的性质:这个点不是割点,m-这个点的度数 ...

  7. Atcoder dp_q Flowers 数据结构优化dp

    文章目录 题意 题解 最近在练习atcoder上的dp场,大概只会做一半.我选出一些不会的题目写一下博客. 题意 按顺序每朵花有一个高度,一个美丽度,选出一个高度上升的子序列,求美丽度之和的最大值. ...

  8. AtCoder AGC043C Giant Graph (图论、SG函数、FWT)

    题目链接 https://atcoder.jp/contests/agc043/tasks/agc043_c 题解 场上感觉没啥思路就放弃了,场下想了十几分钟发现是水题,血亏...(只能怪自己计数水平 ...

  9. AtCoder AGC033F Adding Edges (图论)

    ------------恢复内容开始------------ 题目链接 https://atcoder.jp/contests/agc033/tasks/agc033_f 题解 又被神仙题搞自闭了-- ...

最新文章

  1. 转发 DDoS攻防战 (一) : 概述
  2. [转载]C#模拟键盘鼠标事件-SendKeys
  3. java disjoint_java – Union Find算法的应用(Disjoint Set)
  4. LYNC2013部署系列PART4:群聊部署
  5. GCC for Win32开发环境介绍
  6. 一种页面数据错误输入提示方法 【转】
  7. centos7.6查看什么进程跑的流量_Spark的提交方式有哪些?有什么区别?
  8. 机器人softmove_ABB 工业机器人 SoftMove功能介绍
  9. excel文件打不开怎么办_电脑设备管理器打不开怎么办
  10. 开课吧:深入了解C++和C语言的血缘关系
  11. 中信所怎么查期刊影响因子_中华细胞与干细胞杂志影响因子
  12. 一款简洁的税后工资计算器(2019)
  13. 介绍中国传统节日的网页html,介绍中国传统节日
  14. Hadoop高手之路1—Hadoop简介
  15. 使用计算机制作数字文本格式,电脑excel表格如何将文本格式变成数字格式
  16. 6款超实用微信小程序,任何手机都需要!
  17. 2022圣诞节用canvas实现流星雨
  18. 参加“灵狐公司”的技术年会,感受最新MS OFFICE 2007的应用价值!
  19. 炫酷 RGB 之.NET nanoFramework 点灯大师
  20. 招投标的具体流程是什么?

热门文章

  1. php5 函数,2017PHP5函数大全
  2. 等值连接_sql高阶教程:非等值自连接
  3. row间距 table 某一行_UITableview的一个section下的各行Row之间可以设置间隔一段距离吗?...
  4. [scala-spark]3. 变量 数据类型 分支与循环
  5. 探究Java常量本质及三种常量池(JVM)
  6. java transient关键字
  7. PM2.5检测 -- PMS7003 采集和 MQTT 传输
  8. 高一计算机专业用平板电脑,高中生需不需要平板电脑或者笔记本电脑?
  9. Java变量的作用域
  10. 以太坊智能合约安全 Dasp Top10