P13172题解
byd
afo 一个月,绿题弄了两三个晚上,笑拉了
题意:
有
Sol:
如果只考虑限制一,将座位从小到大扫,如果坐不下就加车次;
如果只考虑限制二,答案直接就是
现在给出一个结论,如果我们先令
假设
按照上面的结论,
考虑用二分图匹配证明。将座位(左)和人的编号(右)连边,那么我们每一轮都要找出完美匹配。可以用 Hall 定理。假设还剩
然后考虑计算答案。
设
先将
那么
Code:
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int T,n,c,m,ans1,ans2,c1[N],c2[N];
int main()
{
scanf("%d",&T);
for(int t = 1;t <= T;t++)
{
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
scanf("%d%d%d",&n,&c,&m);
for(int i = 1,p,b;i <= m;i++) scanf("%d%d",&p,&b),c1[p]++,c2[b]++;
ans1 = ans2 = 0;
for(int i = 1;i <= c;i++) ans1 = max(ans1,c2[i]);
for(int i = 1,s = 0;i <= n;i++) s += c1[i],ans1 = max(ans1,(s + i - 1) / i);
for(int i = 1;i <= n;i++) if(c1[i] > ans1) ans2 += c1[i] - ans1;
printf("Case #%d: %d %d\n",t,ans1,ans2);
}
return 0;
}