#Tarjan#洛谷 5676 [GZOI2017]小z玩游戏】的更多相关文章

小z玩游戏 Tarjan算是板子题吧,但是要稍微做一些修改,建边需要多考虑,建立"虚点". 题目描述 小 z 很无聊. 小 z 要玩游戏. 小 z 有\(N\)个新游戏,第\(i\)个游戏看上去的有趣程度为\(w_i\).小 z 很挑,他只会玩看上去的有趣程度是自己兴奋程度整数倍的游戏.由于游戏实际上有好玩的也有不好玩的,玩完第\(i\)个游戏后,小 z 的兴奋程度会变为\(e_i\) . 已知小 z 初始兴奋程度为\(1\),请问小 z 有多少个游戏可能会玩两次? 输入格式 第一行一…
P2175 小Z的游戏分队 小Z受不了寂寞,准备举办一次DOTA比赛,为了能让ACM班全部都参加比赛,他还特制了一张DOTA地图能够支持任意多人打任意多人. 现在问题来了,怎么把这么多人分成两队?小Z的想法是,每个人报上自己愿意同队的同学,接着小Z会按如下要求将所有人分为两队: 对任意同学甲,和同学甲同队的人,必须都是同学甲愿意同队的同学. 小Z希望两队的人数差尽量小,如果这种分组不存在,那么输出No solution. 先想判无解的情况. 因为分两个组,所以可以通过二分图染色判环. 那么按照不…
题目描述 分析 一开始看到这道题,首先想到的就是建好边后跑一个Tarjan缩点,将siz大于1的节点统计一下,输出结果 Tarjan非常显然易得,关键就是怎么建边 比较好想的一种思路就是枚举每一个兴奋程度 对于每一个兴奋程度,再将有趣程度枚举一遍 如果有趣程度是兴奋程度的倍数的话,在两个节点之间建一条有向边 我们拿第二个样例模拟一下,建好边后就是下面这样 那么缩点后大小不为1的强连通分量只有一个,它的大小为3 那么最终的答案就是\(3\) 但是这样的建边效率为\(n^2\),复杂度接受不了 所以…
题目戳我 \(\text{Solution:}\) 考虑建图.操作可以看作对\(1\)进行的操作,于是有以下运行过程: \(1\to w[i]\to e[i]\to...\) 考虑倍数,一个数可以走到所有是它的倍数的数.于是这样建图: \(w[i]\to e[i],i\to i*j.\) 然后发现倍数的边可以只建立质数的倍数即可. 题目本质是将所谓游戏重玩看成环,并将操作抽象为对初始元素\(1\)进行的状态转移,进而建立出模型. #include<bits/stdc++.h> using na…
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了. 现在考虑怎么算上面那个东西. 对于单个的计算,我们可以用二项式定理直接展开 得到 \[\begin{aligned}\sum(a+b)^k&=\sum\sum_{i=0}^kC_k^ia^ib^{k-i}\\&=\sum_{i=0}^kC_k^i(\sum a^i)(\sum b^{k-i…
原题来自与:洛谷 P5676(GZOI2017)  链接: https://www.luogu.com.cn/problem/P5676 题面: 题意比较明显,如果已经建好了边,那么跑个Tarjan 就完了. 但是问题在于建边的复杂度,比较好想的是n2  的建边方式. 但是时间肯定不允许. 那么我们就要想一种时间复杂度较小的建边方式. 可以考虑引入中间变量兴奋程度 那么如何建边, 首先将点开多一些 把中间变量兴奋程度也当作点 然后建边 1.建一个由 有趣程度 到 点 的边 2.建一个由 点 到…
P4279 [SHOI2008]小约翰的游戏 题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有\(n\)堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输. 小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误.小约翰一怒之前请你来做他的参谋.自然,你应该先写一个程序,预测一下谁将获得游戏的胜利. 输入输出格式 输…
题目链接 洛谷T30212 题解 式子很容易推出来,二项式定理展开后对于\(k\)的答案即可化简为如下: \[k!(\sum\limits_{i = 0}^{k} \frac{\sum\limits_{x = 1}^{n} a_x^{i}}{i!} \centerdot \frac{\sum\limits_{x = 1}^{n} b_x^{k - i}}{(k - i)!})\] 是一个卷积的形式 我们只需对所有\(k\)预处理出\(\sum\limits_{i = 1}^{n} a_i^{k}…
Description 小凸和小方是好朋友,小方给小凸一个 \(N \times M\)( \(N \leq M\) )的矩阵 \(A\) ,要求小秃从其中选出 \(N\) 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 \(N\) 个数中第 \(K\) 大的数字的最小值是多少. Input 第一行给出三个整数 \(N\) , \(M\) , \(K\) 接下来 \(N\) 行,每行 \(M\) 个数字,用来描述这个矩阵 Output 如题 Sample Input 3 4 2…
题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙当边,一张图的生成树个数为每个点的度数矩阵减去邻接矩阵的任意一个代数余子式的值. 模数是$10^9$,不可以直接高斯消元,可以用辗转相除法来消元 卡点:无 C++ Code: #include <algorithm> #include <cstdio> #include <cst…