容易想到 这个环一定是简单环。

考虑如果是复杂环 那么显然对于其中的第一个简单环来说 要么其权值为负 如果为正没必要走一圈 走一部分即可。

对于前者 显然可以找到更小的 对于第二部分是递归定义的。

综上 这个环是一个简单环。

那么最多有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的更多相关文章

  1. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  2. bzoj4773 负环 倍增+矩阵

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4773 题解 最小的负环的长度,等价于最小的 \(len\) 使得存在一条从点 \(i\) 到自 ...

  3. 4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT

    第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右 ...

  4. 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)

    Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...

  5. 5.19 省选模拟赛 小B的夏令营 概率 dp 前缀和优化dp

    LINK:小B的夏令营 这道题是以前从没见过的优化dp的方法 不过也在情理之中. 注意读题 千万不要像我这个sb一样 考完连题意都不知道是啥. 一个长方形 要求从上到下联通的概率. 容易发现 K天只是 ...

  6. 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点

    容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...

  7. Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)

    /* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...

  8. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  9. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

随机推荐

  1. day35 socket套接字介绍

    目录 一.套接字发展史与分类 二.套接字工作流程 三.基于tcp的套接字 一.套接字发展史与分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD U ...

  2. Anbox补充:添加arm支持(失败!)

    写在开头: 本人是一边操作一边写博文的,折腾一下午写到最后失败了不舍得删,还是发上来记录一下我的操作,希望能有高人指点或者给同学们一点启发.以下的内容仅做观看即可,若无必要就不必尝试了. 之前写了一篇 ...

  3. element-ui 表单校验 Rules 配置 常用黑科技

    type 指示type要使用的验证器.可识别的类型值为: string:类型必须为string.type 默认是 string // 校验 string: [ {type: 'string', mes ...

  4. Maven 专题(四):什么是Maven

    1 Maven 简介 Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理.Maven 这个单词的本意是:专家,内行.读音是['meɪ ...

  5. 机器学习实战基础(二十五):sklearn中的降维算法PCA和SVD(六) 重要接口,参数和属性总结

    到现在,我们已经完成了对PCA的讲解.我们讲解了重要参数参数n_components,svd_solver,random_state,讲解了三个重要属性:components_, explained_ ...

  6. 爬虫01 /jupyter、爬虫概述、requests基本使用

    爬虫02 /jupyter.爬虫概述.requests基本使用 目录 爬虫02 /jupyter.爬虫概述.requests基本使用 1. jupyter的基本使用 2. 爬虫概述 3. reques ...

  7. JVM垃圾回收(五)

    低延迟垃圾收集器 衡量垃圾收集器的三项最重要的指标是: 内存占用(Footprint).吞吐量(Throughput)和延迟(Latency).三者总体的表现会随技术进步而越来越好,但是要在这三个方面 ...

  8. 初识Java对象

    初始Java对象 本文的概述顺序 1什么是面向对象编程(面向对象编程与 面向过程编程的区别) 2类和对象的的关系 3类的定义 4对象的创建 5对象使用的一些细节 5.1对象在内存中的产生及分布 5.2 ...

  9. 从Excel(CSV)文件导入数据到Oracle

    步骤: 1.准备数据:在excel中构造出需要的数据2.将excel中的数据另存为文本文件(有制表符分隔的)3.将新保存到文本文件中的数据导入到pl*sql中在pl*sql中选择tools--text ...

  10. Python Ethical Hacking - BACKDOORS(1)

    REVERSE_BACKDOOR Access file system. Execute system commands. Download files. Upload files. Persiste ...