(CSP2019准备)图论专题

T1

「NOIP2017」逛公园

题意

策策同学特别喜欢逛公园。 公园可以看成一张 N N N 个点 M M M 条边构成的有向图,且没有自环和重边。其中 1 1 1 号点是公园的入口, N N N 号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间。

策策每天都会去逛公园,他总是从 1 1 1 号点进去,从 N N N 号点出来。

策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间。如果 1 1 1 号点到 N N N 号点的最短路长为 d d d,那么策策只会喜欢长度不超过 d + K d + K d+K 的路线。

策策同学想知道总共有多少条满足条件的路线,你能帮帮他吗?

为避免输出过大,答案对 P P P 取模。

如果有无穷多条合法的路线,请输出 − 1 −1 1
对于不同测试点,我们约定各种参数的规模不会超过如下

测试点编号 T T T N N N M M M K K K是否有 0 0 0
1 1 1 5 5 5 5 5 5 10 10 10 0 0 0
2 2 2 5 5 5 1000 1000 1000 2000 2000 2000 0 0 0
3 3 3 5 5 5 1000 1000 1000 2000 2000 2000 50 50 50
4 4 4 5 5 5 1000 1000 1000 2000 2000 2000 50 50 50
5 5 5 5 5 5 1000 1000 1000 2000 2000 2000 50 50 50
6 6 6 5 5 5 1000 1000 1000 2000 2000 2000 50 50 50
7 7 7 5 5 5 100000 100000 100000 200000 200000 200000 0 0 0
8 8 8 3 3 3 100000 100000 100000 200000 200000 200000 50 50 50
9 9 9 3 3 3 100000 100000 100000 200000 200000 200000 50 50 50
10 10 10 3 3 3 100000 100000 100000 200000 200000 200000 50 50 50

对于 100 % 100\% 100% 的数据: 1 ≤ P ≤ 1 0 9 , 1 ≤ a i , b i ≤ N , 0 ≤ c i ≤ 1000 1\le P \le 10^9,1 \le a_i,b_i \le N ,0 \le c_i \le 1000 1P109,1ai,biN,0ci1000

数据保证:至少存在一条合法的路线。

题解

直观地有DP式: f [ i ] [ j ] f[i][j] f[i][j]为到i号点,路程比最短路大i的方案数,问题在于转移的顺序。若果没有0边,显然路程递增,就是满足拓扑序的,而加上0边,会产生0环,需要比较复杂的特判。考虑能否直接记忆化搜索,对于一个状态,枚举连向它的边,可以得出它由哪些状态转移过来,于是搜索下去,当发现一个状态调用自己时就判为-1,用标记数组记录哪些状态在调用中即可,这样就减少了思维和代码的难度。

T2

LOJ 2524. 「HAOI2018」反色游戏

题意

小C和小G经常在一起研究搏弈论问题,有一天他们想到了这样一个游戏.

有一个 n n n 个点 m m m 条边的无向图,初始时每个节点有一个颜色,要么是黑色,要么是白色.现在他们对于每条边做出一次抉择:要么将这条边连接的两个节点都反色(黑变白,白变黑),要么不作处理.他们想把所有节点都变为白色,他们想知道在 2 m 2^m 2m 种决策中,有多少种方案能达成这个目标.

小G认为这个问题太水了,于是他还想知道,对于第 i i i 个点,在删去这个点及与它相连的边后,新的答案是多少.

由于答案可能很大,你只需要输出答案对 1 0 9 + 7 10^9 + 7 109+7 取模后的结果.

对于所有数据,有 1 ≤ T ≤ 5 , 1 ≤ n , m ≤ 1 0 5 , 1 ≤ u , v ≤ n 1 \le T \le 5, 1 \le n, m \le 10^5, 1 \le u, v \le n 1T5,1n,m105,1u,vn ,没有重边和自环.

题解

也不知道为什么原本什么思路都没有,其实解法还是比较自然的。
对于图感觉很难做,先考虑比较特殊的情况,比如一棵树(感觉这也是一种套路吧):因为每次反色只会使偶数的黑点变为白点,故若黑点有奇数个一定无解,否则从下往上可把一条条边唯一确定是否取反。
考虑在树上加边,则每次与原树边组成一个环,那么不论这条边取什么,原树边都还是唯一确定一种取颜色的方案,于是一张连通图的总方案为 2 m − n + 1 2^{m-n+1} 2mn+1,那么设联通块个数为k,则方案数为 2 m − n + k 2^{m-n+k} 2mn+k
对于删去一个点,考虑是否会新增连通块,以及是否会使原连通块无解,维护每个点是否属于割点,以及在DFS树上,含奇数个黑点的子树个数即可。

T3

codeforces 1220E

题意

给定一颗 n n n个节点的有根树,要求从根出发,每次不能走上次走来的边,求到达节点权值和的最大值(一个节点经过多次只算一次)。
n ≤ 2 × 1 0 5 , 1 ≤ w i ≤ 1 0 9 n\le 2\times 10^{5},1\le w_i\le 10^{9} n2×105,1wi109

题解

依据题意,一个边双中的点可以互相任意到达,边双之间也可互相到达。对原图的边双缩点,变为中间是一些边双的外向树的形态,于是贪心即可。

T4

题意

给定坐标系上的n个点,将它们黑白染色,要求使得每行、每列的黑白颜色数差不超过1,输出一种方案。
数据范围: n ≤ 200000 , 1 ≤ x i , y i ≤ 200000 n\le 200000,1\le x_i,y_i\le 200000 n200000,1xi,yi200000

题解

orz直接切掉的xjq(而我一点思路都没有)
比较套路地(而我完全没想到),把每行、每列看做一个点,每个点看作对应行、列的一条连边,要求把边染色,使每个点黑、白连边颜色数只差不超过1。
先考虑黑白颜色数相等的情况,联想到用欧拉回路交替地把边染色,如果能染完就没有问题(因为每条边都是行和列之间的边)。而欧拉回路存在的条件是每个点度数都为偶数,考虑对于度数为奇数的点,因为还可以有1的误差,故把它们两两之间连边,这样用欧拉回路染色后依然合法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值