题目大意:有一张$n(n\leqslant50)$个点$m(m\leqslant n(n-1))$条边的有向图,每个点还有一个自环,每个点有一个权值。每一秒钟,每个点的权值会等分成出边个数,流向出边。$q(q\leqslant5\times10^4)$次询问,每次问$t$秒时每个点的权值,只需要输出异或和

题解:矩阵快速幂,可以构造出转移矩阵,发现直接做的复杂度是$O(qn^3\log_2t)$,不可以通过。

然后预处理转移矩阵的$2^i$次幂,就可以$O(n^2)$完成一次转移(向量乘矩阵),这样复杂度是$O(qn^2log_2t)$,看起来不可以通过本题,但其实也可以了。

题解中说是把预处理中的二进制改成$k$进制,这样复杂度是$O(n^3k\log_kt+qn^2\log_kt)$

卡点:

C++ Code:

#include <cstdio>
#include <cctype>
namespace __IO {
namespace R {
int x, ch;
inline int read() {
while (isspace(ch = getchar())) ;
for (x = ch & 15; isdigit(ch = getchar()); ) x = x * 10 + (ch & 15);
return x;
}
}
}
using __IO::R::read; #define maxn 50
const int mod = 998244353;
namespace Math {
inline int pw(int base, int p) {
static int res;
for (res = 1; p; p >>= 1, base = static_cast<long long> (base) * base % mod) if (p & 1) res = static_cast<long long> (res) * base % mod;
return res;
}
inline int inv(int x) { return pw(x, mod - 2); }
} struct Matrix {
#define N 50
int n, m;
int s[N][N]; inline Matrix operator * (const Matrix &rhs) {
Matrix res;
res.n = n, res.m = rhs.m;
for (register int i = 0; i < n; ++i) {
for (register int j = 0; j < rhs.m; ++j) {
static long long t; t = 0;
for (register int k = 0; k < m; ++k) t += static_cast<long long> (s[i][k]) * rhs.s[k][j] % mod;
res.s[i][j] = t % mod;
}
}
return res;
}
#undef N
} I, base[32], ans; int n, m, q;
int oud[maxn];
int main() {
n = read(), m = read(), q = read();
for (int i = 0; i < n; ++i) I.s[0][i] = read(), base[0].s[i][i] = 1, oud[i] = 1;
I.n = 1, I.m = n;
while (m --> 0) {
int a = read() - 1, b = read() - 1;
++base[0].s[a][b];
++oud[a];
}
base[0].n = base[0].m = n;
for (int i = 0, t; i < n; ++i) {
t = Math::inv(oud[i]);
for (int j = 0; j < n; ++j) base[0].s[i][j] = static_cast<long long> (t) * base[0].s[i][j] % mod;
}
for (int i = 1; i < 32; ++i) base[i] = base[i - 1] * base[i - 1];
while (q --> 0) {
Matrix res = I;
for (int i = read(); i; i &= i - 1) res = res * base[__builtin_ctz(i)];
int ans = 0;
for (int i = 0; i < n; ++i) ans ^= res.s[0][i];
printf("%d\n", ans % mod);
}
return 0;
}

  

[洛谷P5107]能量采集的更多相关文章

  1. 洛谷P1063 能量项链(区间DP)(环形DP)

    To 洛谷.1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的 ...

  2. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  3. 洛谷 P1063 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  4. 洛谷P1063能量项链题解

    $题目$ 不得不说,最近我特别爱刷这种区间DP题,因为这个跟其他的DP有些不一样的地方,主要是有一定的套路,就是通过小区间的状态更新大区间,从而得到原题给定区间的最优解. $但是$ 这个题应该跟$石子 ...

  5. [NOIP2006] 提高组 洛谷P1063 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  6. 洛谷——P1063 能量项链

    P1063 能量项链 题目描述 在MarsMars星球上,每个MarsMars人都随身佩带着一串能量项链.在项链上有NN颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对 ...

  7. 洛谷 P1063 能量项链 题解

    P1063 能量项链 题目描述 在\(Mars\)星球上,每个\(Mars\)人都随身佩带着一串能量项链.在项链上有\(N\)颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并 ...

  8. 洛谷P1063 能量项链 [2006NOIP提高组]

    P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标 记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  9. 洛谷P1063能量项链(区间dp)

    题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...

随机推荐

  1. wamp报错SCREAM:Error suppression ignored for

    问题:SCREAM:Error suppression ignored for 解决: 在php.ini最下面加入scream.enabled = Off http://stackoverflow.c ...

  2. RSA加密通信小结(一)

    一.背景描述 帮朋友完成相关方案的改进. 二.计划与方案 1.加密方式采用RSA 1024加密. 2.发送与接收都采用RSA加密,采用两套不同的密钥. 3.统一的加解码函数.(此处除了对于传输数据进行 ...

  3. 180626-Spring之借助Redis设计一个简单访问计数器

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设 ...

  4. 错误码:2003 不能连接到 MySQL 服务器在 (10061)

    今天在ubuntu上安装了mysql服务器,在windows上用客户端软件连接mysql服务器时,出现错误: 错误码: 不能连接到 MySQL 服务器在 () 折腾来折腾去没搞好,防火墙也关了,330 ...

  5. Linux命令应用大词典-第19章 文件系统管理

    19.1 mkfs:创建Linux文件系统 19.2 mke2fs:创建ext2.3.4文件系统 19.3 mkfs.ext4:创建ext4文件系统 19.4 mkfs.ext3:创建ext3文件系统 ...

  6. ionic 提示框

    html文件 <ion-header> <ion-navbar> <ion-title>Toast</ion-title> </ion-navba ...

  7. Halcon10 下载

    Halcon10 下载地址:http://www.211xun.com/download_page_1.html HALCON 10 是一套机器视觉图像处理库,由一千多个算子以及底层的数据管理核心构成 ...

  8. 使用深度学习来破解 captcha 验证码(转)

    使用深度学习来破解 captcha 验证码 本项目会通过 Keras 搭建一个深度卷积神经网络来识别 captcha 验证码,建议使用显卡来运行该项目. 下面的可视化代码都是在 jupyter not ...

  9. 脚本 script 常用脚本

    目录 remove_all_pyc find_all_links rename_with_slice load_json_without_dupes execution_time benchmark_ ...

  10. Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点

    Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点 一.安装docker 执行代码如下: curl -sSL https://get.daocloud.io ...