叶落归根(hometown)
叶落归根(hometown)
题目描述
叶落归根——树叶从树根生发出来,凋落后最终还是回到树根。比喻事物总有一定的归宿。接下来是题目。
给定一个n个点的有向图G(点的编号为1~n),一开始落叶(仅作为一个代号,你也可以当成是Alice、Bob、甲乙丙丁戊己庚辛壬癸…)会在G的某个点s上。总共有t个单位时间,每个单位时间落叶都必须通过一条当前所在点的出边到达下一个点(有时下一个点和当前点会是相同的)。
需要注意的是,如果当前所在点没有任何出边,落叶就会在这个单位时间被迫离开这张图,并且我们认为落叶永远不会再回来了。
你要做的是对于每一个起始点s以及每一个总时长t(1<=t<=Q且为整数)求出落叶在起始点为s且经过t单位时间后的位置也是s的方案数。
两个方案不同,当且仅当两个方案中存在至少一个时刻落叶所经过的边不是图G中的同一条边。
为了便于检验,只需要输出所有情况(即所有不同的起始点和总时长,一共n*Q种情况)的方案数对给定正整数P取模后的异或和即可——也就是说,假设所有情况的方案数分别是ans1、ans2、ans3……你要输出的就是(ans1 mod P) xor (ans2 mod P) xor (ans3 mod P)……
输入
第一行3个整数n、Q、P,分别表示图G的点数、总时长t的上限和给定的模数P
接下来n行,每行n个整数,其中第i行第j个数表示图G中从i出发到j的单向边数目
输出
一行一个整数,表示所有情况的方案数对给定正整数P取模后的异或和
样例输入
2 2 1000000207
2 3
4 5
样例输出
50
提示
数据规模和约定
对于前10%的数据:n=2,Q=20
对于另外10%的数据:n=3,Q=12
对于前50%的数据:n<=20
对于100%的数据:1<=n<=100,P<=2^30,Q<=10000,对于任意一对(u,v),图G中从u到v的边数不超过2^30
来源
solution
就是一个矩阵,问你1-Q次方的对角线的和。
考虑枚举t(1<=t<=Q)
n^3乘出显然不行了。
那么可以分块。考虑令o=sqrt(n)
预处理矩阵的1~o次方 和x*o 次方(1<=x<=o)
那么每次相当于求对角线。n^2乘起来就行。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define maxn 10005
using namespace std;
int n,q,mod,o;
ll ans,A[][][],B[][][];
ll read(){
int v=;char ch;
while(!isdigit(ch=getchar()));v=(v<<)+(v<<)+ch-;
while(isdigit(ch=getchar()))v=(v<<)+(v<<)+ch-;
return v;
}
int main(){
cin>>n>>q>>mod;o=sqrt(q);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)A[][i][j]=read();
for(int x=;x<=o;x++){
for(int i=;i<=n;i++)
for(int k=;k<=n;k++)
for(int j=;j<=n;j++){
A[x][i][j]=(A[x][i][j]+A[x-][i][k]*A[][k][j])%mod;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
B[][i][j]=A[o][i][j];
}
int T=q/o+;
for(int x=;x<=T;x++){
for(int i=;i<=n;i++)
for(int k=;k<=n;k++)
for(int j=;j<=n;j++){
B[x][i][j]=(B[x][i][j]+B[x-][i][k]*B[][k][j])%mod;
}
}
for(int i=;i<=n;i++)A[][i][i]=B[][i][i]=;
for(int x=;x<=q;x++){
int t1=x/o,t2=x%o;
for(int i=;i<=n;i++){
ll tmp=;
for(int k=;k<=n;k++){
tmp=(tmp+A[t2][i][k]*B[t1][k][i])%mod;
}
ans=ans^tmp;
}
}
cout<<ans<<endl;
return ;
}
叶落归根(hometown)的更多相关文章
- POJ2774 Long Long Message [后缀数组]
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 29277 Accepted: 11 ...
- 【翻译】用AIML实现的Python人工智能聊天机器人
前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...
- WPF绑定到集合
什么是集合视图? 集合视图是位于绑定源集合顶部的一层,您可以通过它使用排序.筛选和分组查询来导航和显示源集合,而无需更改基础源集合本身.集合视图还维护着一个指向集合中的当前项的指针.如果源集合实现了 ...
- [转]Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on (C#)
本文转自:https://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-o ...
- My year of 2016
2016, year of excellence. Year of happiness. In Beijing we can also find some happiness which is s ...
- mongoose数据库连接和操作
var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...
- AJAX 与 MySQL
AJAX 与 MySQL AJAX 可用来与数据库进行交互式通信. AJAX 数据库实例 下面的实例将演示网页如何通过 AJAX 从数据库读取信息: 实例 Select a person: P ...
- 浅谈JSON
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格式,为什么没有 ...
- Swift3.0P1 语法指南——函数
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
随机推荐
- lvs+ipvsadm负载均衡
使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...
- 平衡二叉查找树 AVL 的实现
不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找).如何解决这个问题呢?关键在于如何最大限度的减小树的深度.正是基于这个想法,平衡二叉树出现了. 平衡二叉树的定义 (A ...
- python__基础 : sys模块: sys.argv与sys.path
sys模块中的 argv 保存的是当你运行一个py文件的时候给他传递进去的参数,如: import sys a = sys.argv print(a) # 当在命令行中调用这个py文件: > p ...
- SQL-批量插入和批量更新
批量插入 表结构一样或类似 如果两张表的结构一样,例如一个表的结构和另一个表的结构一样,只是其中一张是临时表,而另一张表是存储数据的表,我们需要进行一次表的迁移的话,我们可以这样. insert in ...
- 手机连上同一个局域网的PC,修改项目的vhost配置
<VirtualHost 172.16.6.100:80> DocumentRoot "D:\phpStudy\WWW\mywork\many_school" Serv ...
- 编辑工具_vi
vi/vim平时经常会用到,但是一直没有时间系统的整理下,今天看到了一篇不错的介绍文章.引用下,就当做笔记了,但是不晓得该怎么填引用路径,如有侵权请告知,补上引用路径 01. vi 简介 1.1 学习 ...
- Error: Cannot find module 'core-js/fn/array/values' at Function.Module._resolveFilename (module
E:\codeBase\top605\rescue-master\server\node_modules\_log4js@1.1.1@log4js\lib\log4js.js:321 throw ne ...
- svn服务器的配置和使用
安装好了svn服务器,打开 VisualSVN Server Manager 先新建用户和组,在代码库创建的时候可以指定哪些用户或者组有读写权限,也可以创建好后指定 创建用户 输入用户名和密码创建用户 ...
- 宝石TD迷宫设计器
说起宝石TD,能追溯到我上高二那会,算来是2005年. 所谓一款TD类的魔兽RPG,宝石TD可以算是达到了TD迷宫的巅峰,三进三出更是别具匠心. 这个迷宫设计器是去年在焦作做的,只完成了迷宫设计功能, ...
- groupSum6后向遍历
http://codingbat.com/prob/p199368 public boolean groupSum6(int start, int[] nums, int target) { if( ...