叶落归根(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)的更多相关文章

  1. POJ2774 Long Long Message [后缀数组]

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 29277   Accepted: 11 ...

  2. 【翻译】用AIML实现的Python人工智能聊天机器人

    前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...

  3. WPF绑定到集合

    什么是集合视图? 集合视图是位于绑定源集合顶部的一层,您可以通过它使用排序.筛选和分组查询来导航和显示源集合,而无需更改基础源集合本身.集合视图还维护着一个指向集合中的当前项的指针.如果源集合实现了 ...

  4. [转]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 ...

  5. My year of 2016

    2016, year of excellence.   Year of happiness. In Beijing we can also find some happiness which is s ...

  6. mongoose数据库连接和操作

    var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...

  7. AJAX 与 MySQL

    AJAX 与 MySQL AJAX 可用来与数据库进行交互式通信. AJAX 数据库实例 下面的实例将演示网页如何通过 AJAX 从数据库读取信息: 实例   Select a person:   P ...

  8. 浅谈JSON

    JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格式,为什么没有 ...

  9. Swift3.0P1 语法指南——函数

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

随机推荐

  1. 《JSON笔记之二》----封装JSONUtil

    许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象.list.map等对象格式,对于开 ...

  2. 制作linux系统U盘并使用U盘安装CentOS7.6系统

    目录   一.制作linux启动盘     1.1. 准备工作     1.2. 制作linux系统U盘   二.使用U盘安装Centos7.6     2.1. 使用U盘启动     2.2. 更改 ...

  3. libvirt笔记(未完待续)

    参考源地址:http://libvirt.org/formatdomain.html http://blog.csdn.net/qq250941970/article/details/6022094 ...

  4. phpstorm 安装XeDbug

    第一步:根据phpinfo()下载相对应的Xdebug插件,Xdebug下载路径https://xdebug.org/download.php 第二步:将下载好的Xdebug放到 G:\Service ...

  5. 零基础学css

    选择器:标签选择器.id选择器.类选择器 ---------------------------------------------------------------------------- 标签 ...

  6. 02,Python网络爬虫第二弹《http和https协议》

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  7. 1,版本控制git--仓库管理

    ​ 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc 毕业论文_修改3.d ...

  8. 用for循环计算(1-3+5-7...99)的结果(两种方法)

    1) sum=0 count=1 for i in range(1,100,2): if count % 2==0: sum = sum - i else: sum = sum + i count = ...

  9. 【转】正则表达式速查表(http://www.jb51.net/shouce/jquery1.82/regexp.html)

    正则表达式速查表 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,“n”匹配字符“n”.“\n”匹配一个换行符.串行“\\”匹配“\”而“\( ...

  10. Toolbar中menu菜单文字颜色的修改

    Toolbar菜单中menu当中我们大多数都使用图片来按钮,可是有些时候我们也会直接使用文字,文字的颜色如何修改呢. 其实很简单,我们只要修改styles.xml文件中,添加一句 <item n ...