BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC - 矩乘
Solution
想到边权为$1$的情况直接矩乘就可以得出长度$<=t$ 的路径条数, 然后二分check一下即可
但是拓展到边权为$2$,$3$ 时, 需要新建节点 $i+n$ 和 $i+2n$. 从 $i+n$ 到 $i$ 连边, $i+2n$ 到 $i+n$ 连边
若 $dis[j,i]=2$,则把 $j$ 向 $i+n$连边, 距离为 $3$时同理
但是发现这样点数就有 $3*N$ 个, 二分答案+矩乘的复杂度会非常高。
那么只能用和倍增求 $LCA$ 类似的解法, 二进制枚举
复杂度为$O(N^3 logk)$
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rd read()
#define ll long long
#define N 130
#define R register
using namespace std; int n, up, m;
ll cnt; int read() {
int X = , p = ; char c = getchar();
for (; c > '' || c < ''; c = getchar())
if (c == '-') p = -;
for (; c >= '' && c <= ''; c = getchar())
X = X * + c - '';
return X * p;
} struct matrix {
ll mp[N][N];
bool yue;
matrix() {
yue = false;
}
matrix operator * (const matrix &b) const {
matrix re;
memset(re.mp, , sizeof(re.mp));
for (R int i = ; i <= up; ++i)
for (R int j = ; j <= up; ++j) {
for (R int k = ; k <= up; ++k)
re.mp[i][j] += mp[i][k] * b.mp[k][j];
if (re.mp[i][j] < ) re.yue = true;
}
return re;
}
}ans, po[]; bool check(matrix tmp) {
ll rest = cnt;
if (tmp.yue) return ;
for (int i = ; i <= n; ++i) {
if (tmp.mp[i][] < ) return ;
if (tmp.mp[i][] - >= rest) return ;
rest -= tmp.mp[i][] - ;
}
return ;
} int main()
{
n = rd; m = rd;
up = n * ;
scanf("%lld", &cnt);
po[].mp[][] = ;
for (int i = ; i <= n; ++i) {
po[].mp[i + n][i] = ;
po[].mp[i + * n][i + n] = ;
po[].mp[i][] = ;
ans.mp[i][i] = ;
}
for (R int i = ; i <= m; ++i) {
int u = rd, v = rd, w = rd - ;
po[].mp[u][v + n * w]++;
}
bool flag = false;
int lim;
for (lim = ; lim <= ; ++lim) {
po[lim] = po[lim - ] * po[lim - ];
if (check(po[lim])) {
flag = true; break;
}
}
if (!flag ) return puts("-1"), ;
ll res = ;
for (int i = lim; ~i; --i) {
matrix tmp = ans * po[i];
if (!check(tmp)) ans = tmp, res += 1LL << i;
}
printf("%lld\n", res);
}
BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC - 矩乘的更多相关文章
- bzoj 4386: [POI2015]Wycieczki
bzoj 4386: [POI2015]Wycieczki 这题什么素质,爆long long就算了,连int128都爆……最后还是用long double卡过的……而且可能是我本身自带大常数吧,T了 ...
- 【BZOJ-4386】Wycieczki DP + 矩阵乘法
4386: [POI2015]Wycieczki Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 197 Solved: 49[Submit][Sta ...
- BZOJ4386[POI2015]Wycieczki——矩阵乘法+倍增
题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入 第 ...
- 【bzoj4386】[POI2015]Wycieczki 矩阵乘法
题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入 第 ...
- BZOJ4386 : [POI2015]Wycieczki
将每个点拆成三个点,并将转移转化为矩阵乘法,然后倍增即可求出第$k$短路的长度,注意对爆long long情况的处理. 时间复杂度$O(n^3\log k)$. #include<cstdio& ...
- BZOJ4386 [POI2015]Wycieczki 矩阵+倍增
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4386 题解 一眼就可以看出来是邻接矩阵快速幂. 可是这里的边权不为 \(1\).不过可以发现, ...
- [POI2015]Wycieczki
题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入输出 ...
- BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/pro ...
- BZOJ4381 : [POI2015]Odwiedziny / Luogu3591[POI2015]ODW - 分块+树剖
Solution 在步伐$pace$比较小的时候, 我们发现用前缀和直接维护会很快 而在$pace$比较大的时候, 则暴力往上跳会最优 设$blo= \sqrt{N}$ 若$pace<=blo$ ...
随机推荐
- AndroidStudio 开发JNI
Android版本不断更新,发现网上很多JNI的教程,都不太适用了,会遇到各种问题,今天自己来总结一个. NDK下载 我们下载NDK,有两种下载方式: 这是Google官方下载 点击下载NDK: 通过 ...
- 【idea】之使用SVN一些技巧
@Copy https://www.cnblogs.com/whc321/p/5669804.html
- Python【每日一问】06
问:简述Python文件打开模式 r. w. a. r+.w+.a+之间的区别 答: 1.只读模式 r 文件存在:只读打开,只能执行读操作 文件不存在:报错 # ######## 只读模式r #### ...
- ef join查询
temp = temp.OrderByDescending(s => s.CreateTime).Skip((param.PageIndex - ) * param.PageSize).Take ...
- iOS开发SDWebImageOptions理解
iOS开发SDWebImageOptions理解 原文 http://www.cnblogs.com/WJJ-Dream/p/5816750.html typedef NS_OPTIONS(NSUIn ...
- activate-power-mode效果实验(未完全成功)
原产地: Atom 支持版本一览 https://github.com/codeinthedark/awesome-power-mode 1.安装Atom:[ AtomSetup-x64.exe] 百 ...
- CDC工具使用
最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是0in工具. 本来要 写一些关于 CDC的 知识点,临时有事,要 ...
- [java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)
内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次m ...
- java的环境配置
java的安装 1,进入官网 https://www.oracle.com/index.html 2.Menu -> Downloads -> java -> all Java ...
- spring 生命周期最详解
转载. https://blog.csdn.net/qq_23473123/article/details/76610052 目的 在大三开始学习spring时,老师就说spring bean周期非常 ...