题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386
(luogu) https://www.luogu.org/problemnew/show/P3597

为啥这种题我都不会了啊
题解: 首先如果边权全都为\(1\), 那么就新建一个计数器,每个点连计数器,计数器连个自环。然后邻接矩阵快速幂倍增即可
如果边权有\(2\)和\(3\), 就分别新建一个节点连向出点
细节不少,特别是判断是否大于\(k\)的时候不能爆long long(据说这题数据水,所以我不敢保证下面的代码不会被卡)

代码

#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 = 121;
llong p;
struct Matrix
{llong a[N+3][N+3]; int n;Matrix() {}Matrix(int _n) {n = _n; for(int i=0; i<=n; i++) for(int j=0; j<=n; j++) a[i][j] = 0ll;}void init(int _n) {n = _n; for(int i=0; i<=n; i++) for(int j=0; j<=n; j++) a[i][j] = 0ll;}void unitize(int _n) {n = _n; a[0][0] = 0ll; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) a[i][j] = i==j?1ll:0ll;}void output() {if(a[0][0]==-1) puts("gg"); for(int i=1; i<=n; i++) {for(int j=1; j<=n; j++) printf("%d ",a[i][j]); puts("");}}Matrix operator *(const Matrix &arg) const{Matrix ret(n);for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){for(int k=1; k<=n; k++){if(k==n){if(arg.a[j][k]>0 && (a[i][j]>=p/arg.a[j][k]+1 || ret.a[i][k]>=p-a[i][j]*arg.a[j][k])){ret.a[0][0] = -1;return ret;}}ret.a[i][k] = ret.a[i][k]+a[i][j]*arg.a[j][k];}}}llong sum = 0ll;for(int i=1; i<=n/3; i++){if(sum>=p-ret.a[i][n]) {ret.a[0][0] = -1; return ret;}sum += ret.a[i][n];}return ret;}
} g,pw[65],tmp;
int n,m;llong solve()
{pw[0] = g; int i = 0;for(i=1; i<=61; i++){pw[i] = pw[i-1]*pw[i-1];if(pw[i].a[0][0]==-1){break;}}if(i==62) {return -1;}llong ret = 0ll; g.unitize(n+n+n+1);for(i--; i>=0; i--){tmp = g*pw[i];if(tmp.a[0][0]!=-1){ret|=(1ll<<i);g = tmp;}}return ret;
}int main()
{scanf("%d%d%lld",&n,&m,&p); p+=n;g.init(n+n+n+1);for(int i=1; i<=m; i++){int x,y,w; scanf("%d%d%d",&x,&y,&w);if(w==1) {g.a[x][y]++;}else if(w==2) {g.a[x+n][y]++;}else if(w==3) {g.a[x+n+n][y]++;}}for(int i=1; i<=n; i++){g.a[i][i+n]++;g.a[i+n][i+n+n]++;g.a[i][n+n+n+1]++;}g.a[n+n+n+1][n+n+n+1]++;llong ans = solve();printf("%lld\n",ans);return 0;
}

BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)相关推荐

  1. Luogu P3597 [POI2015]WYC___矩阵乘法快速幂+倍增

    题目大意: 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 无自环 ...

  2. 【bzoj4386】[POI2015]Wycieczki 矩阵乘法

    题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种. 将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入 ...

  3. BZOJ 3329 Xorequ (数位DP、矩阵乘法)

    BZOJ 3329 Xorequ (数位DP.矩阵乘法) 手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/arti ...

  4. #倍增+矩阵乘法# [luogu P3597] [POI2015]WYC

    Title P3597 [POI2015]WYC Solution 注意这道题code中的一些细节 这道题做的我人都傻了,关键是有两种理解,但是关系不大. .. f[k][i][k]f[k][i][k ...

  5. BZOJ 4180: 字符串计数 后缀自动机 + 矩阵乘法 + 二分(神题)

    Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...

  6. BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...

  7. BZOJ 1875 [SDOI2009]HH去散步 矩阵乘法

    题意: 给定一张无向图,每条路的长度都是1,没有自环,可能有重边,给定起点与终点,求从起点走t步到达终点的方案数. 每一步走的时候要求不能走上一条刚刚走的路. 解析: 显然需要搞出个矩阵之后矩乘. 然 ...

  8. c语言定义int 输出4386,C语言 · 矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  9. 【矩阵乘法】生成树计数(luogu 2109/NOI 2007)

    生成树计数 luogu 2109 题目大意 有n个排成一列的点,把距离不超过k的点之间连边,问这个图的生成树个数 输入样例 3 5 输出样例 75 样例说明 样例对应的图如下: 数据范围 解题思路 因 ...

最新文章

  1. C#玩转指针(二):预处理器、using、partial关键字与region的妙用
  2. php依次替换src,如何在php中替换img中src内容
  3. windows server 远程桌面安装和配置
  4. Bugfree安装与使用
  5. 鸿蒙系统首批机型,华为鸿蒙系统支持的手机型号有哪些 首批公测机型有这些...
  6. html.fromhtml 加载图片,TextView使用html.fromhtml加载html并显示图片
  7. 修改配置文件后不重启程序即时生效
  8. dep指定版本 go_golang 官方依赖管理工具 dep 使用和持续集成
  9. 磁盘提示:使用驱动器中的光盘之前需要将其格式化怎么办?
  10. (转) 两天快速开发一个自己的微信小程序
  11. 生鲜配送小程序源码_生鲜配送小程序系统功能开发介绍(附带源码)
  12. Translation[VERTEBRA-FOCUSED LANDMARK DETECTION FOR SCOLIOSIS ASSESSMENT]——2021.6.18
  13. pip安装三方库不成功的解决方法
  14. OPT机器视觉12月高峰论坛一览表
  15. Linux - 安装内核源码
  16. CSS 网页背景图片设置
  17. 无力吐槽:各位忠实的fans家人们,博客之星评选 我4000粉丝,尽然拼不过一个49粉的博主,期待你们帮忙
  18. 【Spark NLP】第 9 章:信息提取
  19. 新手自主创业需要注意哪些误区
  20. 推荐13款优秀的Twitter Bootstrap JavaScript插件

热门文章

  1. 云炬VB开发笔记 4选择结构
  2. 基于源码仿建视频解析网站
  3. 超详细的 Bert 文本分类源码解读 | 附源码
  4. linux用户和群组的作用,linux中的用户、群组和权限
  5. adobe字体_Adobe发布全新LOGO!字体颜色变红了
  6. 混合模型的推荐算法(ACM暑校-案例学习)
  7. 有监督分类:集成分类(Bagging Boosting RandomForest)
  8. LBP(局部二值模式)特征提取原理
  9. 成员函数和友元函数实现一元运算符重载
  10. ubuntu 终端内查找/搜索