两种建图方法:
1、每种数拆点
ai,a′i
a
i
,
a
i
′
,然后
O(n2)
O
(
n
2
)
暴力求出可以匹配的
ai,aj
a
i
,
a
j
,连边
(ai,a′j,INF,c[i]∗c[j])
(
a
i
,
a
j
′
,
I
N
F
,
c
[
i
]
∗
c
[
j
]
)
和
(a′i,aj,INF,c[i]∗c[j])
(
a
i
′
,
a
j
,
I
N
F
,
c
[
i
]
∗
c
[
j
]
)
,然后连每个
(S,ai,b[i],0)
(
S
,
a
i
,
b
[
i
]
,
0
)
和
(a′i,T,b[i],0)
(
a
i
′
,
T
,
b
[
i
]
,
0
)
。建出的图是对称的,所以最终答案除以2即可。
2、观察配对的条件。设
ai>aj
a
i
>
a
j
,
ai
a
i
与
aj
a
j
配对等价于
ai=aj∗p
a
i
=
a
j
∗
p
,
p
p
为质数。因此我们将和
aj
a
j
分解质因子后就可发现,这一条件等价于质因子质数和
cnti=cntj+1
c
n
t
i
=
c
n
t
j
+
1
。所以我们把
ai
a
i
按
cnti
c
n
t
i
的奇偶性分开,这就是一个二分图了,连边类似方法1。
不管哪种方法建图,我们最后都要跑最大费用流。但是存在限制:费用不小于0。这里需要用到贪心的思想:每次沿最长路增广,如果当前最长路即使只流1的流量都会使费用小于0,停止增广。
总结:
1、通过拆点,建有对称性的图,最后答案除以2的方法可以满足一些流量对称性的要求。(本题要求边
(S,ai)
(
S
,
a
i
)
与
(a′i,T)
(
a
i
′
,
T
)
流量相等)
2、用贪心思想满足费用流的费用限制。