标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Output
Sample Input
Sample Output
Author
M个商店,N个工厂,每个商店获利的条件是建设了指定的k个工厂。求总获利不小于L,工厂建设的时间最大值最小是多少。
工厂到汇点建一条边pay[i],源点到商店建一条边pro[i],商店到需要的工厂建一条边INF,商店的总收益-最小割就是答案。
可以看看国家集训队论文:Amber《最小割模型在信息学竞赛中的应用》
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#define N 205<<1
#define sf(a) scanf("%d",&a);
using namespace std;
const int INF=0x3f3f3f3f;
struct plant{
int pay,t,id;
}pt[N];
struct shop{
int pro,k,pt[N],t;
}s[N];
int t,n,m,l,st,ed,tot;
int arc[N][N], d[N];
int ans,tans;
bool bfs()
{
memset(d, -1, sizeof d);
queue<int>q;
q.push(st);
d[st] = 0;
while(!q.empty())
{
int i,k=q.front();
q.pop();
for(i = 1; i <= ed; i++)
if(arc[k][i] > 0 && d[i] == -1)
{
d[i] = d[k] + 1;
q.push(i);
}
}
return d[ed]>0;
}
int dinic (int k, int low)
{
if(k == ed)return low;
int a,i;
for(i = 1; i <= ed; i++)
if(d[i] == d[k] + 1&& arc[k][i] > 0 &&(a = dinic(i, min(low, arc[k][i]))))
{
arc[k][i] -= a;
arc[i][k] += a;
return a;
}
return 0;
}
int cmp(plant a,plant b){
return a.t<b.t;
}
int main() {
sf(t);
for(int cas=1;cas<=t;cas++){
printf("Case #%d: ",cas);
scanf("%d%d%d",&n,&m,&l);
for(int i=1;i<=n;i++){
scanf("%d%d",&pt[i].pay,&pt[i].t);
pt[i].id=i;
}
for(int i=1;i<=m;i++){
sf(s[i].pro);
sf(s[i].k);
s[i].t=0;
for(int j=1;j<=s[i].k;j++){
int x;
sf(x);
s[i].pt[j]=x;
s[i].t=max(s[i].t,pt[x].t);
}
}
sort(pt+1,pt+1+n,cmp);
int ok=0;
st=n+m+1,ed=st+1;
for(int i=1;i<=n;i++){
memset(arc,0,sizeof arc);
for(int j=1;j<=i;j++)
arc[pt[j].id][ed]=pt[j].pay;
tot=0;
for(int j=1;j<=m;j++)if(s[j].t<=pt[i].t){
tot+=s[j].pro;
arc[st][j+n]=s[j].pro;
for(int k=1;k<=s[j].k;k++)
arc[j+n][s[j].pt[k]]=INF;
}
ans = 0;
while(bfs())
while(tans=dinic(st, INF)) ans += tans;
ans=tot-ans;
if(ans>=l){
printf("%d %d\n",pt[i].t,ans);
ok=1;
break;
}
}
if(!ok)puts("impossible");
}
}
工厂按时间排序再依次增大最大时间,这样是140ms,改成二分以为会更快,结果960ms,去了注释们再交一次居然超时了。可能是dinic用的是邻接矩阵的原因。
【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)
标签:
原文地址:http://www.cnblogs.com/flipped/p/5777837.html