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.
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$](https://www.luogu.com.cn/problem/P4214)
### 一、题目大意
你被雇佣升级一个旧果汁加工厂的橙汁运输系统。系统有管道和节点构成。每条管道都是双向的,且每条管道的流量都是$1$升每秒。管道可能连接节点,每个节点最多可以连接$3$条管道。节点的流量是无限的。节点用整数$1$到$n$来表示。在升级系统之前,你需要对现有系统进行分析。对于两个不同节点$s$和$t$, $s-t$的流量被定义为:当$s$为源点,$t$为汇点,从$s$能流向$t$的最大流量。
以下面的第一组样例数据为例,$1-6$的流量为$3$, $1-2$的流量为$2$。计算每一对满足$a< b $的节点$ a-b $的流量的和。
** 输入**
第一行包括$ 2 $个整数$ n $和$ m $($ 2 <= n <= 3000 , 0 <= m <= 4500 $)——节点数和管道数。
接下来$ m $行,每行包括两个相异整数$ a , b $($ 1 <= a , b <= n $),表示一条管道连接节点$ a , b $。
每个节点最多连接$ 3 $条管道,每对节点最多被一条管道连接。
** 输出**
输出一个整数——每对满足$ a < b $的节点$ a-b $的流量之和。
** 测试样例**
``` cpp {. line-numbers }
6 8
1 3
2 3
4 1
5 6
2 6
5 1
6 4
5 3
```
**答案**
```cpp {.line-numbers}
36
```
** 翻译一下**:
有一张图,每个点至多连三条边,每条边流量上限都是 $ 1 $,设$ f ( x , y )$ 表示 $ x $ 到 $ y $ 的最大流量,那要你求出 $ \displaystyle \sum_ { x = 1}^n \sum_ { y = x+1}^n f ( x , y )$。
### 二、题解
因为每个点至多连三条边,所以 $ f ( x , y )$ 的值只可能是 $ 0 , 1 , 2 , 3 $。
如果两点间不连通,那么就是 $ 0 $。
如果两点不在一个边双里面但是连通,那么这两点间的路径显然有割点,所以就是 $ 1 $。
那么怎么判断 $ 2 $ 和 $ 3 $ 呢?
如果是 $ 2 $ 的话,那么说明两点间只有两条边不重复路径,那么如果删掉路径上的一条边,那么这两个点就不属于同一个边双了。
所以我们可以尝试删掉图中的每一条边,然后每次都求一次边双,假如两个点一直存在于同一个边双,那么就是 $ 3 $,否则是 $ 2 $。
怎么判断呢?我们可以将一个点呆过的所有边双的编号用哈希压成一个数,然后判断两点的哈希值是否相等即可。