20201208

20201206

A 步道乐跑 (图论

参考FLoyd最短路径算法
Problem Description刘神打算开始进行他的步道乐跑,当他打开他的步道乐跑时发现,他的步道乐跑出现了bug,他的乐跑规则和别人的不一样,他每次开始会刷新n个打卡点,他需要在t秒内打完m个卡,他的步道乐跑只会记录目前打卡数量和最近一次打卡成功的点,也就是说他可以在两个点之间来会打卡,但是不能重复打一个卡。刘神的步道乐跑开始之后是无法暂停的,他当然可以在开始之前先走到任意一个打卡点,但是刘神很懒他不想走太久,他还想跑完之后赶紧回到宿舍打LOL,因此他挑了起点s终点e,他想知道他从起点到终点他需要跑多少米,假设他的跑步平均速度是 x m/s,他是否可以完成。Input第一行6个整数 n,m,t,x,s,e。(2<=n<=100,2<=m,t,x<=10^6),接下来n*(n-1)/2行,每行三个整数u,v,w(1 ≤ u,v ≤ n),表示u号打卡点和v号打卡点的距离是w(0<=w<10000)Output第一行输出一个整数表示他需要跑多少米第二行输出Yes如果他可以完成否则输出NoSample Input2 2 1 3 1 21 2 3Sample Output3YesHint保证没有重边Source吴君羽

给一个n个点的完全图,求s到e要走k个点的最短路,因为不能重复在一个点走,所有就相当于走m-1条边的最短路(起点算一个点),用图邻接矩阵上的乘法的应用可以知道,如果。如果点a和
点b连边,那么邻接矩阵G [a, b] = G [b, a] = 1,否则都等于0,就表示从a到b长度为k的路径条数,所有只要把矩阵乘法改成Floyd,就可以求出s,e走m-1条边的最短路,由于m较大,采用矩阵快速幂就可以求出结果。
code
学长的代码

C电气工程(图论

题目描述:
orangeko最近在学专业课–电力系统分析,书上有道例题是这样的:
藤泽市新建了n个变电站,变电站有等级之分并且通过线路相连在一起构成了一个有向无环图。
由于变压设备的限制,线路上的电流只能由高等级变电站传输到低等级变电站,同时,如果一个变电站同时与两个或以上等级更低的变电站相连时,高等级变电站不能向它们同时输送电流,只能选择其中一个低等级变电站输送。
你可以带着超级电池直接在某个变电站进行供电实验,这可以看做是你选择有向无环图中的某一个出度不为0点u,从u开始电流会通过一条链式电路输送到某个出度为0的点
受麻衣学姐的委托,你需要测试所有线路是否全部都能正常工作,也就是每次使用电池产生的链式电流覆盖了整个电路网。
问:最少需要多少块超级电池能够测试完所有的试验线路(假设没有线路是断路)

Input
输入:
一个数n表示变电站个数,接下来n(2≤n≤100)行:
第i(1~n)行的第一个数为m(1≤m≤n),代表一条起点为变电站i的链式电路,i连接有m个变电站。
接下来m个数:第j个数k表示由i和k之间有一条线路。

PS:输入保证是一个有向无环图

Output
输出:
一个整数表示最少使用的超级电池数量。

Sample Input
4
1 2
0
1 2
2 3 1
Sample Output
2
Hint
在4号站使用第一次电池产生电流链 4 -> 1 -> 2

在4号站使用第二次电池产生电流链 4 -> 3 -> 2

所有变电站之间的线路被检测完毕,需要两个电池

Source
orangeko

因为他们说oi爷什么类型的数论都会,所以只好出了个图论题
本题有两种基础解法,第一种是参考“BZOJ 征服王”的做法,利用最小链覆盖来求解本题。这种建图需要稍微变动下原图,在此不做赘述,感兴趣的可以先做一下征服王,学习下这种建图方法。
通过观察题目给出的条件,可以发现,在整个网络上要满足所有边都有电流流过,相当于求该网络:流满、流量守恒时的最小可行解,即该图的最小流。
这时可以引出本题更简单的第二种做法:有源汇上下界网络流求解最小流。
在寻求一个能使网络满流的最小流时,一种是在边数较少时二分容量的上界,一种是利用有源汇上下界网络流的性质。
给定有源汇流量网络G 。询问是否存在一种标定每条边流量的方式,使得每条边流量满足上下界同时除了源点和汇点每一个点流量平衡。如果存在,询问满足标定的最小流量。类似的,我们考虑将残量网络中不需要的流退掉。我们找到网络上的任意一个可行流。如果找不到解就可以直接结束。否则我们考虑删去所有附加边之后的残量网络。我们在残量网络上再跑一次T到S的最大流,将可行流流量减去最大流流量即为答案。
Std:
代码:题解

E 填色游戏

参考:练习

小p最近迷上了填色游戏。
在一次填色游戏中,你会得到一个有n个等距空位,首尾相接的环。
你可以从1到m种颜色中任选x种,对环的n个等间隔空位进行随意填色,每种颜色可以使用多次。
小p不满足于仅进行填色,他想知道对于每次填色游戏,会有多少种本质不同的结果。
聪明的你能帮助他得出答案么?
需要注意的是,如果涂色方案a可以通过旋转或沿轴反转得到的涂色方案b,则a与b视为本质相同。
(如n = 4, m = 4时, abca、bcaa、acba三种视为本质相同)
答案可能非常大,请输出答案对Mod取模的结果。

Input
第一行输入一个T,表示一共有T次填色游戏。
随后T行,每行包含三个整数m, n, Mod, 分别表示颜色种数,空位数,模数。

Output
对于每次填色游戏,输出一个整数,表示答案取模后的结果。

Sample Input
3
1 10 1000000007
10 1 1000000007
3 4 1000000007
Sample Output
1
10
21
Hint
1 <= T <= 6000
1 <= m, n <= 1000000000
1 <= Mod <= 1000000007

Mod一定为素数

请使用快速的输入输出方式,如scanf和printf。

样例解释:

当m = 3, n = 4时,所有结果为

/ 1111 / 1112 / 1113 / 1122 / 1123 / 1133 / 1212 /

/ 1213 / 1222 / 1223 / 1232 / 1233 / 1313 / 1323 /

/ 1333 / 2222 / 2223 / 2233 / 2323 / 2333 / 3333 /

根据“本质不同的填色结果”,很容易想到用Polya定理解决。
这里放上polya定理(没基础的建议先学置换群)

其中L表示本质不同的方案数,|G|表示置换数,c(gi)表示i时的循环节个数,s表示染色位置数,m表示颜色数。
对于置换数
因为一个位置为n的串,有n个旋转和n个翻转,所以总置换数为2n
对于循环节个数,分开考虑旋转和翻转
对于旋转时,循环节数为gcd(i, n)
(证明https://blog.csdn.net/braketbn/article/details/50669362)
对于翻转时,分开讨论n为偶数和奇数的情况
n为奇数时,循环节数为(n + 1) / 2
n为偶数时,分开讨论翻转轴线是否经过点
不经过点时,循环节数为n / 2
经过点时,循环节数为n / 2 + 1
但由此得出的polya定理的模板时间复杂度为O(nlogn)
显然无法处理n数据范围为1e9的本题
所以对于旋转部分,利用欧拉进行优化
gcd(i, n)一定是n的因子,n的因子个数肯定比n少。
因此可以通过枚举n的因子进行优化到大约O(sqrt(n))
若Gcd(x, y) = z,设x = a * z, y = b * z
则a与b一定互质,那么循环节数为z的个数明显为1 ~ a中与b互质的个数,可以利用欧拉函数得出。
另外需要注意的是除法需要利用逆元(M为素数,费马小定理就可以),同时注意取模。

F 字符串

G马保国是个黑心商人

这是一道很容易理解的题目。
马保国种了一棵苹果树,这棵苹果树上有n个苹果,编号1~n,并且由n-1个树枝相连。
每个苹果都有自己的重量a[i]。
但是他是个黑心商人,他把第x个到第y个苹果(树上路径)统一注水val重量。
并且,他想知道,第x个苹果到第y个苹果(树上路径)有多少个苹果的重量是奇数。

Input
第一行输入n和m,n表示树上多少个苹果,1<=n<=100000,m表示操作数量1<=m<=100000
第二行输入n个数字,第i个数字为第a[i]个苹果的初始重量。
之后n-1行,每行由x和y组成,表示x和y之间有一个枝条相连。
接下来m行,每行由order(1<=order<=2) 、 以及x和y组成(1<=a,b<=n)和val组成。

order=1,表示他要开始注水val了。
order=2,则输出编号为x的苹果到编号为y的苹果路径上重量是奇数的苹果的数量。

Output
为了强制在线,每一次答案ans都要乘上一次的答案lasans,模1e5+9后再加1,,lasans初始值为1:

(输出的ans)=(本次奇数苹果的数量num)*(上一次输出的答案lasans)%mod+1;

Sample Input
5 5
1 2 3 4 5
1 2
2 3
1 4
1 5
2 2 4
1 2 4 1
2 2 4
2 2 4
2 2 4
Sample Output
2
5
11
23
这题就是个树剖的板子题,就树剖,你要是看过树剖铁定弄得出来。
我们问的时候只问树上奇数的个数,所以。
如果注的水是偶数,就不用管
如果添加的奇数,就在线段树里,奇数和偶数得个数互换就好(这个很容易想到)。
这里由于树剖代码有点长了,我给出标程链接:

题解

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值