首页 > 其他分享 >P4159 [SCOI2009] 迷路

P4159 [SCOI2009] 迷路

时间:2023-08-26 16:51:21浏览次数:43  
标签:const 迷路 ll 路径 zuo SCOI2009 P4159 jgt 边权

传送门

先思考\(C_{i,j}\)要么只有0和1两种值的情况,那么这种情况就是求矩阵\(C^k\)中的\(C_{1,n}\)的值。

证明:令矩阵\(G=C^2=\sum\limits_{k=1}^nC(i,k)*C(k,j)\),即当\(C(i,k)\)和\(C(k,j)\)都为1时,才有\(C(i,k)*C(k,j)\)才为1,表示\(i->k->j\)的路径,而\(G(i,j)\)即计算了枚举了所有中间点\(k\)的合法路径数量。所以\(G(i,j)\)表示在\(t=2\)时\(i->j\)不同路径的数量

令矩阵\(M=C^3=G*C=\sum\limits_{k=1}^nG(i,k)*C(k,j)\),表示\(i->k\)经过两条边有\(G(i,k)\)个数不同路径,而\(k->j\)经过一条边有\(C(k,j)\)条路径,乘起来即\(i->k->j\)经过三条边的合法路径数量,再枚举所有的k,即\(M(i,j)\)表示\(i->j\)经过三条边的合法路径数量

以此类推

那么考虑\(C_{i,j}=0\)~\(9\)的情况,我们可以把一个点拆成九个点。

eg:我们将\(A_1\)拆成\(A_{1,1}\)~\(A_{1,9}\),然后连接\(A_{1,1}\)与\(A_{1,2}\)、\(A_{1,2}\)与\(A_{1,3}\)......\(A_{1,8}\)与\(A_{1,9}\),使他们边权为1。

\(u->v\)边权为\(k\)就与就将\(A_{u,k}\)与\(A_{v,1}\)连一条边权为1的边。

再将他们放到邻接矩阵\(B\)内,输出\(B_{(1,1),(n,1)}\)

上代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=110,mod=2009;
ll n,n1,k,zh,gs,zuo=1,you=1;
char sr;
struct jgt
{
	ll a[N][N];
}ans,mi;
jgt operator * (const jgt t1,const jgt t2)
{
	jgt t={0};
	for(ll i=1;i<=n1;i++)
	for(ll j=1;j<=n1;j++)
	for(ll k=1;k<=n1;k++)
	t.a[i][j]=(t.a[i][j]+(t1.a[i][k]*t2.a[k][j])%mod)%mod;
	return t;
}
int main()
{
	scanf("%lld %lld",&n,&k);
	n1=n*9;
	for(ll i=1;i<=n;i++)
	for(ll j=1;j<=8;j++)
	mi.a[(i-1)*9+j][(i-1)*9+j+1]=1;
	while(zuo<=n)
	{
		scanf("%c",&sr);
		if(sr<'0'||sr>'9') continue;
		if(sr>'0') mi.a[(zuo-1)*9+sr-'0'][(you-1)*9+1]=1;
		you++;
		if(you>n) you-=n,zuo++;
	}
	for(ll i=1;i<=n1;i++) ans.a[i][i]=1;
	while(k)
	{
		if(k&1) ans=ans*mi;
		mi=mi*mi;
		k=k/2;
	}
	printf("%lld\n",ans.a[1][n1-8]);
	return 0;
}

标签:const,迷路,ll,路径,zuo,SCOI2009,P4159,jgt,边权
From: https://www.cnblogs.com/pengchujie/p/17659013.html

相关文章

  • Luogu P4159 [SCOI2009] 迷路
    [SCOI2009]迷路题目背景windy在有向图中迷路了。题目描述该有向图有\(n\)个节点,节点从\(1\)至\(n\)编号,windy从节点\(1\)出发,他必须恰好在\(t\)时刻到达节点\(n\)。现在给出该有向图,你能告诉windy总共有多少种不同的路径吗?答案对\(2009\)取模。注意:windy......
  • P4159 [SCOI2009] 迷路
    目录题目链接题目内容前置知识:矩阵快速幂思路历程1.我寻思这图里咋还有自环呢2.ok快乐的板子时光总是短暂的()3.额我们还是不看边权,但是不扯到图上去了。4.那我们现在加上边权吧5.回归本题代码实现:题目链接题目内容[SCOI2009]迷路题目背景windy在有向图中迷路了。题目描述......
  • 2023-5-21 #55 渐行渐远迷路的我 看向了光年外璀璨星河
    358P5897[IOI2013]wombats线段树维护矩阵乘法,注意到有决策单调性,复杂度\(O(nC^2\logn)\),但是空间过大,我们递归到一个较小的区间时暴力计算即可,若阈值为\(k\),空间会整体除\(k\)。359P8275[USACO22OPEN]262144RevisitedP先考虑一个序列的问题:答案显然不超过最大值\(......
  • P2657 [SCOI2009] windy 数 数位DP好题
    P2657[SCOI2009]windy数-洛谷|计算机科学教育新生态(luogu.com.cn)数位DP好题主要问题是:不含前导零且相邻两个数字之差至少为 2solution:现在枚举到了第i位......
  • 【转载】茅台巽风app地图详解,做任务不迷路,纯手绘
    茅台发布了新的app“巽风”根据“巽值”的排名,发放20000个虎年茅台的资格,还是可以玩一玩的哪些途径获取“巽值”1.做任务,和游戏里面的导师、村民聊天。完成他们交代的......
  • #yyds干货盘点# LeetCode程序员面试金典:迷路的机器人
    题目:设想有个机器人坐在一个网格的左上角,网格r行c列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路......
  • P4159 [SCOI2009] 迷路
    \(P4159\)[\(SCOI2009\)]迷路题目传送门前序知识整理关键词:矩阵+快速幂P1226【模板】快速幂||取余运算矩阵乘法P3390【模板】矩阵快速幂P1939【模板】矩阵加......
  • P4158 [SCOI2009]粉刷匠
    题意:windy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格......
  • 做题记录整理dp11 P4158 [SCOI2009]粉刷匠(2022/9/23)
    P4158[SCOI2009]粉刷匠事实上前半个小时我甚至没想用dp做。。。感觉这道题难度标高了(跟那个想让我测出题人的码的题相比)首先可以发现每一行之间都是独立的,所以先考虑把......
  • 【线性dp】 [SCOI2009]粉刷匠
    点个关注点个赞吧一道比较简单的线性dp题目前置知识:会手推一些简单的状态转移方程、较为熟练地掌握背包问题模型[SCOI2009]粉刷匠题目描述windy有\(N\)条木......