叶落归根(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. 出门旅行(tour)

    出门旅行(tour) 题目描述: 在神奇的 oi 国度,有 n 个城市 m 条双向道路,每条道路连接了两个不同的城市.寒假到了,小 S 决定出门旅游一趟.因为以往跟团旅游多了,这次小 S 决定自驾游. ...

  2. Eclipse中文乱码解决方案

    Eclipse中文乱码解决方案 1)第一个设置:window>perferences>general>workspace>text file encoding 2)Jsp编码问 ...

  3. Java打印金字塔问题

    Java打印金字塔问题 public class 金字塔问题 { // //普通金字塔 // public static void main(String[] args) { // //先打印4层 / ...

  4. 一、小程序连接MySql数据库

    前言:我用的是wafer2 node.解决方案 下面连接有环境配置及搭建流程(https://github.com/tencentyun/wafer2-quickstart-nodejs) ,连接是官 ...

  5. rsync+lsyncd实现实时同步

    1.接收端安装rsync,修改/etc/rsyncd.conf配置文件,然后启动服务. uid = rootgid = rootuse chroot = nomax connection = 4sec ...

  6. JIRA 6.3的那些事(1):linux环境安装

    一直以来,自认为对JIRA是还算比较熟悉 从3.x 就开始使用,然后用4.x 近期公司对BUG系统进行选型: 我极力推荐JIRA  ! 然后,JIRA 的安装.部署.配置任务就给到我了: 本以为应该是 ...

  7. php实现当前页面点击下载文件的实例

    php控制器中代码 public function downFile($path = ''){     if(!$path) header("Location: /");      ...

  8. 如何导入CSV数据 (python3.6.6区别于python2 环境)

    1.python2环境下 2.python3.6.6环境下 如果用python2环境下的代码,在python3.6.6环境下编译会出现以下问题: 错误(1): SyntaxError:Missing ...

  9. Dawson City【道森市】

    Dawson City Cities usually have a good reason for being where they are, like a nearby port or river. ...

  10. Poweroj:2425-跳台阶(经典递推)

    题目链接:https://www.oj.swust.edu.cn/problem/show/2425 跳台阶 Edit Manage Data Rejudge Time Limit: 1000 MS ...