4.28 省选模拟赛 负环 倍增 矩阵乘法 dp


容易想到 这个环一定是简单环。
考虑如果是复杂环 那么显然对于其中的第一个简单环来说 要么其权值为负 如果为正没必要走一圈 走一部分即可。
对于前者 显然可以找到更小的 对于第二部分是递归定义的。
综上 这个环是一个简单环。
那么最多有n个点。
考虑枚举起点 然后 设f[i][j][k]表示从i到j经过k条边的最短路。
容易发现最终的答案为 f[i][i][w]<0 w.
不过这样做是n^4的。
考虑优化 容易想到二分 而上述状态其实本质上是一个矩阵乘法。
那么我们可以矩阵乘法在n^3logn的时间内得到二分出答案的矩阵。
但是这样正确性有点问题。考虑二分的答案并没有一定的单调性。
一个负环大小可能为3 长度为4时可能没有负环。
更改状态比较好 设f[i][j][k]表示从i到j <=k条边的最短路
这样负环就可以被我们保留下来了 关于这个转移 一个比较大胆的想法是 每次矩阵乘法之后对原矩阵取min.
看起来毫无道理 但是 容易发现这个取min操作相当于 做矩阵乘法时 对角线的值全部为0.
至此我们得到了一个普通意义 即 自己到自己有一个0条边的东西。
如果我们要求的答案为mid 那么显然 mid可以由两个小于mid的最短路组成。
从最优性来看这显然存在。所以这样做是正确的。
不过还需要优化复杂度。
考虑倍增出答案。预处理出矩阵即可。
复杂度n^3log.
const int MAXN=310,G=3;
int n,m,maxx,ans;
int b[MAXN][MAXN],c[MAXN][MAXN];
int a[12][MAXN][MAXN];
int main()
{
freopen("cycle.in","r",stdin);
freopen("cycle.out","w",stdout);
memset(a,0x3f,sizeof(a));
memset(b,0x3f,sizeof(b));
get(n);get(m);
rep(1,n,i)rep(1,n,j)a[0][i][j]=INF;
rep(1,m,i)
{
int get(x),get(y),get(z);
a[0][x][y]=min(a[0][x][y],z);
}
rep(1,n,i)a[0][i][i]=0,b[i][i]=0;
maxx=9;
rep(1,maxx,w)
{
rep(1,n,i)rep(1,n,j)
{
int ww=INF;
rep(1,n,k)ww=min(ww,a[w-1][i][k]+a[w-1][k][j]);
a[w][i][j]=ww;
}
}
int flag=0;
rep(1,n,i)if(a[maxx][i][i]<0)flag=1;
if(!flag){puts("0");return 0;}
fep(maxx,0,w)
{
rep(1,n,i)rep(1,n,j)
{
int ww=INF;
rep(1,n,k)ww=min(ww,b[i][k]+a[w][k][j])%mod;
c[i][j]=ww;
}
flag=0;
rep(1,n,i)if(c[i][i]<0){flag=1;break;}
if(flag)continue;
rep(1,n,i)rep(1,n,j)b[i][j]=c[i][j];
ans=ans|(1<<w);
}
put(ans+1);
return 0;
}
4.28 省选模拟赛 负环 倍增 矩阵乘法 dp的更多相关文章
- 3.28 省选模拟赛 染色 LCT+线段树
发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...
- bzoj4773 负环 倍增+矩阵
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4773 题解 最小的负环的长度,等价于最小的 \(len\) 使得存在一条从点 \(i\) 到自 ...
- 4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT
第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右 ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- 5.19 省选模拟赛 小B的夏令营 概率 dp 前缀和优化dp
LINK:小B的夏令营 这道题是以前从没见过的优化dp的方法 不过也在情理之中. 注意读题 千万不要像我这个sb一样 考完连题意都不知道是啥. 一个长方形 要求从上到下联通的概率. 容易发现 K天只是 ...
- 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点
容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...
- Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
/* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
随机推荐
- Log4j的使用说明
Log4j基本使用方法 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定 ...
- Cow Relays,过N条边的最短路
题目链接 题意: 找从a到b的经过N条边的最短路 分析: 有点板子...方法:矩阵存,然后有个类似快速幂的思想,然后再加上离散化就好了. 没啥写的,只能说说矩阵了,我用的方法是先枚举i,j再枚举k,当 ...
- IDEA怎么设置类的注释模板和方法注释模板
文件头注释模板 File | Settings | Editor | File and Code Templates /** * @Author your name * @DateTime ${YEA ...
- 阿里云上安装启动nginx 以及在个人电脑上通过公网ip访问遇到的问题
1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 ...
- Python网络编程04 /recv工作原理、展示收发问题、粘包现象
Python网络编程04 /recv工作原理.展示收发问题.粘包现象 目录 Python网络编程04 /recv工作原理.展示收发问题.粘包现象 1. recv工作原理 2. 展示收发问题示例 发多次 ...
- three.js 几何体(三)
上一篇介绍了几何体的构造体参数,这篇郭先生就接着上一篇说. 1. ExtrudeGeometry挤压几何体 挤压几何体允许我们从一条形状路径中,挤压出一个Geometry.ExtrudeGeometr ...
- 响应式布局rem、rem方法封装、移动端响应式布局
相信大家在做移动端的时候都会做各个手机的适配这种适配就是响应式布局在之前做网站的响应式从pc到手机用的是媒体查询 @media screen and (max-width: 300px){} 最大宽度 ...
- MnasNet:经典轻量级神经网络搜索方法 | CVPR 2019
论文提出了移动端的神经网络架构搜索方法,该方法主要有两个思路,首先使用多目标优化方法将模型在实际设备上的耗时融入搜索中,然后使用分解的层次搜索空间,来让网络保持层多样性的同时,搜索空间依然很简洁,能够 ...
- 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:我年龄的立方是个4位数。 我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 结果只有一个数。
#include<stdio.h>int main(){ int age=1; int san=0; int si=0; int sum=0; while(age>0) { san= ...
- ffplay源码编译
ffplay是ffmpeg源码中一个自带的开源播放器组件,支持本地视频文件的播放以及在线流媒体播放,很多商业播放器都是基于ffplay定制而来的.ffplay中的代码充分利用了ffmpeg中的函数库, ...