You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

P4214 [CERC2015] Juice Junctions

一、题目大意

你被雇佣升级一个旧果汁加工厂的橙汁运输系统。系统有管道和节点构成。每条管道都是双向的,且每条管道的流量都是1升每秒。管道可能连接节点,每个节点最多可以连接3条管道。节点的流量是无限的。节点用整数1n来表示。在升级系统之前,你需要对现有系统进行分析。对于两个不同节点sts-t的流量被定义为:当s为源点,t为汇点,从s能流向t的最大流量。

以下面的第一组样例数据为例,1-6的流量为31-2的流量为2。计算每一对满足a<b的节点a-b的流量的和。

输入 第一行包括2个整数nm(2<=n<=3000,0<=m<=4500)——节点数和管道数。 接下来m行,每行包括两个相异整数a,b(1<=a,b<=n),表示一条管道连接节点a,b。 每个节点最多连接3条管道,每对节点最多被一条管道连接。

输出 输出一个整数——每对满足a<b的节点a-b的流量之和。

测试样例

6 8
1 3
2 3
4 1
5 6
2 6
5 1
6 4
5 3 

答案

36

翻译一下 有一张图,每个点至多连三条边,每条边流量上限都是 1,设f(x,y) 表示 xy 的最大流量,那要你求出 \displaystyle \sum_{x=1}^n \sum_{y=x+1}^n f(x,y)

二、题解

因为每个点至多连三条边,所以 f(x,y) 的值只可能是 0,1,2,3

如果两点间不连通,那么就是 0

如果两点不在一个边双里面但是连通,那么这两点间的路径显然有割点,所以就是 1

那么怎么判断 23 呢?

如果是 2 的话,那么说明两点间只有两条边不重复路径,那么如果删掉路径上的一条边,那么这两个点就不属于同一个边双了。

所以我们可以尝试删掉图中的每一条边,然后每次都求一次边双,假如两个点一直存在于同一个边双,那么就是 3,否则是 2

怎么判断呢?我们可以将一个点呆过的所有边双的编号用哈希压成一个数,然后判断两点的哈希值是否相等即可。