HDU6331 Problem M. Walking Plan 题意: 给出一张有\(N\)个点的有向图,有\(q\)次询问,每次询问从\(s\)到\(t\)且最少走\(k\)条边的最短路径是多少 \(N\le 50, q\le 10^5, k\le 10^4\) 题解: 如果暴力预处理的话复杂度是\(kN^3\)也就是\(1.25\times 10^9\),空间上肯定开不起 第二个想法就是对邻接矩阵进行矩阵快速幂,对于每次询问都要跑一次,复杂度是\(qN^3\log k\)复杂度更高了 考虑分…
传送门 题目大意 给你一个n点m条边的有向图,q次询问,给定s,t,k,求由s到t至少经过k条边的最短路. 分析 我们设dp[i][j][k]为从i到j至少经过k条边的最短路,sp[i][j]意为从i到j只经过一条边的最短路,于是我们可以得到转移方程式:dp[i][k]=Min{dp[i][m][k-1]+sp[m][j]}.但是我们发现这个样复杂度并不行,于是我们考虑分块,定每一个块的大小为100,对于小于等于100的所有k我们使用上面的dp式子暴力预处理,在这之后我们将按以上方式求出的k=1…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6331 Walking Plan  Problem Description There are n intersections in Bytetown, connected with m one way streets. Little Q likes sport walking very much, he plans to walk for q days. On the i -th day, Little…
传送门 分块floyd $f[i][j][k]$表示从i走k步到j的最短路 $g[i][j][k]$表示从i走k*100步到j的最短路 $h[i][j][k]$表示从i至少走k步到j的最短路 询问从x到y至少走z步的最短路时,因为至多多走n步,用上面预处理的f,g,h可以得出答案. //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #inclu…
题目链接 Problem Description There are $$$n$$$ intersections in Bytetown, connected with $$$m$$$ one way streets. Little $$$Q$$$ likes sport walking very much, he plans to walk for q days. On the $$$i$$$-th day, Little $$$Q$$$ plans to start walking at t…
http://poj.org/problem?id=3613 s->t上经过k条边的最短路 先把1000范围的点离散化到200中,然后使用最短路可以使用floyd,由于求的是经过k条路的最短路,跑k-1次"floyd"即可(使用矩阵快速幂的思想). 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j.令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点).类似地,C*A的第i行第j列就…
Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race using the T (2 ≤ T ≤ 100) cow trails throughout the pasture. Each trail connects two different intersections (1 ≤ I1i ≤ 1,000; 1 ≤ I2i ≤ 1,000…
题意:给出一个有\(n\)个结点的有向图,边有边权.有\(q\)组询问,每次给出\(s,t,k\),问从\(s\)到\(t\)至少经过\(k\)条边的最短路. \(n \leq 50, \, q \leq 10^5, \, k \leq 10^4\) 首先,注意到\(n\)非常小这个性质.对于很多这类点数少,询问不易维护也不复杂的图论题,可以用矩阵来做. 我们设原图的邻接矩阵为\(G\),并定义矩阵的二元运算\(\bigotimes\)为: \[ (A \bigotimes B)_{ij} =…
题目链接 hdu6331 自我吐槽,这场多校大失败,开局签到因输入输出格式写错,wa了3发.队友C题wa了1个小时,还硬说自己写的没错,结果我随便造了个小数据,他都没跑对.然后跑对了后又进入了无限的卡常之中,幸好最后卡过去了. G题我头铁写了个单侧凸壳,不对输入数据判重,而是在加入凸壳时判断,结果wa到比赛结束,进而导致I没时间写.M题开局看错题意直接丢了.最后从30多名掉到了150.这大概就是菜得安详吧 ̄ω ̄= 题意 给定n个点m条有向边,q次查询,每次查询问走至少k条边的,s到t的最短路径的…
题意: sol: 考虑floyed 直接暴力做的话复杂度是kn^3会炸. 考虑一个比较神仙的分块做法. 注意到我们是可以直接求单独某个k的矩阵,使用矩阵快速幂即可(取min的矩阵乘法). 单独求一次的复杂度是O(n^3logk). 设块的长度为100. 对k/100的分块边界求一下它们的矩阵. 这些矩阵称为a矩阵. 再求出前100个矩阵,这个直接floyed即可. 然后对他们搞一个后缀min,也就是说第k个矩阵代表了至少走k条边的最短路矩阵. 这些矩阵称为b矩阵. 那么回答的询问的时候设询问q=…