BZOJ 1898 Swamp 沼泽鳄鱼(矩阵)】的更多相关文章

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1898 题意:一个无向图.给出起点和终点,以及某些时刻某些点不能到达的信息.问从起点出发在时刻K到达汇点的方案数? 思路:如果没有那个限制就是普通的求矩阵的K次幂.现在有了限制,注意到最小公倍数为12,因此周期为12.那么若i时刻j点不能到达,那么i-1时刻的所有点向j置为0,同时i时刻的j向所有点的边置为0.然后求出前12个的矩阵的乘积A.那么对于K/12的求A的幂,对于K%12暴力即…
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1082  Solved: 602[Submit][Status][Discuss] Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客.为了让游玩更有情趣,人们在池塘的中央建设了几座石墩和石桥,每座石桥连接着两座石墩,且每两座石墩之间至多只有一座石…
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1012  Solved: 566[Submit][Status][Discuss] Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客.为了让游玩更有情趣,人们在池塘的中央建设了几座石墩和石桥,每座石桥连接着两座石墩,且每两座石墩之间至多只有一座石…
[BZOJ1898][Zjoi2005]Swamp 沼泽鳄鱼 Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客.为了让游玩更有情趣,人们在池塘的中央建设了几座石墩和石桥,每座石桥连接着两座石墩,且每两座石墩之间至多只有一座石桥.这个景点造好之后一直没敢对外开放,原因是池塘里有不少危险的食人鱼.豆豆先生酷爱冒险,他一听说这个消息,立马赶到了池塘,想做第一个在桥上旅游的人.虽说豆豆爱冒险,但也不…
可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了 PS:第一次吧矩阵乘法AC了好开心QAQ CODE: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #define mod 10000 #define maxn 60 using namespace std; struct mat…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 当然是邻接矩阵做转移矩阵来快速幂. 对于鳄鱼,好在它们周期的lcm是12,也就是每12次就又一样了. 所以把12个转移矩阵合成一下,就可以每次乘一样的,进而快速幂.%12剩下的次数暴力一下. 学到了一些方便的东西,比如struct的构造函数没有参数之类的. #include<iostream> #include<cstdio> #include<cstring&g…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 求到达方案数...还是矩阵快速幂: 能够到达就把邻接矩阵那里赋成1,有鳄鱼的地方从各处来的路径都是0: 因为时间周期只有2,3,4,所以每12个时间就是一个循环: 可以用矩阵快速幂做了. 一开始写了个一团糟,也不明白样例为什么输出0了... #include<iostream> #include<cstdio> #include<cstring> using…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1898 题意概括 有一个无向图. 其中,有许多条鱼在以循环的规律出现,比如循环在1,2,3这些点出现.循环节长度=2,3,4 . 现在,你要从A花费K个单位时间到达B,中途不能和鱼相碰,问有多少方案. (每个单位时间,鱼从当前的点走向循环中的下一个点). n<=50,K<=2000000000 题解 注意到循环节长度为2或3或4. 如果不考虑鱼,那么就是简单的矩阵优化路径统计.可以看这个 现在考…
题意 题目链接 Sol 不难发现吃人鱼的运动每\(12s\)一个周期 所以暴力建12个矩阵,放在一起快速幂即可 最后余下的部分暴力乘 #include<bits/stdc++.h> using namespace std; const int MAXN = 52, mod = 10000; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-')…
----------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   const int MOD = 10000; const int maxn = 59;   int N, S, T, L;   struct matrix { int a…