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