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) 可按如下方法得到:取 ...
随机推荐
- HDU 5969 最大的位或 题解
题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大. 其中\(|\)表示 ...
- rabbitmq部署及配置与验证
1. 场景描述 朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql.Reids.Es.RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以 ...
- Spring-boot 启动报错 调试小技巧
描述: 我们在启动spring-boot,spring-cloud 项目时,是不是经常 遇到报错,但是在控制台 没有能找到 具体 报错信息,只是 提示,启动失败,缺乏具体的报错信息,这样就很不方便我们 ...
- celery 错误相关:Monkey-patching not on the main thread; threading.main_thread().join() will hang from a greenlet
/Users/wangpingyang/.pyenv/versions/3.7.2/lib/python3.7/site-packages/httprunner/__init__.py:5: Monk ...
- python 并发专题(九):基础部分补充(一)进程
概念 串行:所有的任务一个一个的完成. 并发:一个cpu完成多个任务.看起来像是同时完成. 并行:多个cpu执行多个任务,真正的同时完成. 阻塞:cpu遇到IO就是阻塞. 非阻塞:没有IO,就叫非阻塞 ...
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- Odoo13之在tree视图左上角添加自定义按钮
前言 首先展示效果图,如下图所示,在资产设备模块tree视图的左上角添加了一个同步资产的按钮. 要完成按钮的添加,分为四步,分别是: 1.编写xml文件,找到相关模型tree视图,并给模型tree视图 ...
- bilibili自定义调整视频播放速度
自定义调整视频播放速度 在b站的播放页面,按下f12,打开控制台 在控制台中复制下面代码,想几倍速就把2.5改成你想要的播放速度 document.querySelector('video').pla ...
- SqlServer同义词
最近在项目中遇到跨库操作具有相同表结构的数据表的问题.(A库中的数据表a和B库中的数据表b,两者表结构相同) 跨库操作中我们一般是为了实现不同数据库中表字段信息,字段状态等实时同步,可能很多人会想到使 ...
- 通过代理模块拦截网页应用程序流量 - Intercept Web Application Traffic Using Proxy Modules
测试网站: http://testphp.vulnweb.com/login.php 浏览器代理设置为:127.0.0.1:8080 查看拦截流量: 方式1:通Proxy - Intercept 方式 ...