题意
S S SS Z Z ZX 的校运会又开始了。
高一 X X X 班的同学们组成了一个由 n n n 名同学构成的代表队。运动会一共设 m m m 个运动项目,每名同学只能报名最多一个项目,每个项目每个班级也只能报名最多一名同学。
高一 X X X 班的体育委员收集了代表队所有名同学的期望参赛项目和预估参赛成绩。预估参赛成绩分为 K K K 档,从第 1 1 1 名到第 K K K 名。同学们只愿意参加上报的比赛项目。
体育委员把收集的数据交给了你,你需要提供一个报名方案,使得在满足比赛规则和同学要求的情况下,使获得第一名的选手最多。如果两个方案获得第一名的选手一样多,则希望获得第二名的选手最多。以此类推,直到第 K K K名。
对于 20 % 20\% 20% 的数据, 1 ≤ n , m ≤ 10 , 1 ≤ K ≤ 10 1\le n,m\le 10,1\le K\le 10 1≤n,m≤10,1≤K≤10.
对于另外 20 % 20\% 20% 的数据, K = 1 K=1 K=1.
对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 1000 , 1 ≤ K ≤ 10 , ∑ k i ≤ 10000 , 1 ≤ k i ≤ m , 1 ≤ x i j ≤ m , 1 ≤ y i j ≤ K 1\le n,m\le 1000,\, 1\le K\le 10,\,\sum{k_i}\le 10000,\, 1\le k_i\le m,\, 1\le x_{ij}\le m,\, 1\le y_{ij}\le K 1≤n,m≤1000,1≤K≤10,∑ki≤10000,1≤ki≤m,1≤xij≤m,1≤yij≤K.
题解
显然是二分图的模型,考场上想的是把边权按照1000进赋值,然后取跑费用流,但需要开两个long long存边权,写到自闭了。
其实考虑一下一个匹配被替换的时候,最多在左右两边的点各多一个匹配,而如果有排名由于原来匹配的肯定更优,否则最多就是两个排名多1的匹配,所以边权直接赋值为上一个*2+1即可。
注意本题应跑的是最大费用可行流,而不是最大流。
以及spfa等号的时候不要更新,会死循!!!