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.

53 lines
2.3 KiB

2 years ago
## [$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$。
怎么判断呢?我们可以将一个点呆过的所有边双的编号用哈希压成一个数,然后判断两点的哈希值是否相等即可。