二分最大时间,最大流收益

#include<queue>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int N=433;
struct Planet {int pay;LL t;Planet() {};
}pl[N];
bool need[N][N];
int rem[N],profit[N],cnt[N];
LL L;struct Edge{int from,to,cap,flow;Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}
};
int s,t,n,m,top;
vector<Edge>edges;//0=s,1~n工厂,n+1~n+m商店,n+m+1=t
vector<int>G[N];//邻接表
bool vis[N];//use when bfs
int d[N],cur[N];//dist,now edge
void AddEdge(int from,int to,int cap){edges.push_back(Edge(from,to,cap,0));edges.push_back(Edge(to,from, 0 ,0));top=edges.size();G[from].push_back(top-2);G[ to ].push_back(top-1);
}bool BFS(){memset(vis,0,sizeof(vis));queue<int>Q;Q.push(s);d[s]=0;vis[s]=1;while (!Q.empty()){int x=Q.front();Q.pop();for (int i=0;i<G[x].size();i++){Edge &e=edges[G[x][i]];if (vis[e.to]||e.cap<=e.flow)continue;vis[e.to]=1;d[e.to]=d[x]+1;Q.push(e.to);}}return vis[t];
}int DFS(int x,int a){if (x==t||a==0){return a;}int flow = 0,f;for (int& i=cur[x];i<G[x].size();i++){Edge& e=edges[G[x][i]];if (d[x]+1!=d[e.to])continue;if ((f=DFS(e.to,min(a,e.cap-e.flow)))<=0)continue;e.flow+=f;edges[G[x][i]^1].flow-=f;flow+=f; a-=f;if (a==0)break;}return flow;
}int Maxflow(int s,int t){int flow=0;while(BFS()){memset(cur,0,sizeof(cur));flow+=DFS(s,INF);}return flow;
}int check(LL MaxTime){edges.clear();                          //initfor (int i=0;i<=n+m+1;i++)G[i].clear();memset(cnt,0,sizeof(cnt));s = 0,t = n+m+1;for (int i=1;i<=n;i++){AddEdge(i,t,pl[i].pay);if (pl[i].t<=MaxTime)for (int j=1;j<=m;j++)if (need[j][i]) cnt[j]++;}int ans = 0;for (int i=1;i<=m;i++)if (cnt[i]==rem[i]){ans += profit[i];AddEdge(s,n+i,profit[i]);for (int j=1;j<=n;j++)if (need[i][j])AddEdge(n+i,j,INF);}int flow = Maxflow(s,t);return ans-flow;
}int main(){//freopen("fuck.in","r",stdin);//freopen("fuck.out","w",stdout);int T,x;scanf("%d",&T);for (int cas=1;cas<=T;cas++){printf("Case #%d: ",cas);scanf("%d%d%I64d",&n,&m,&L);memset(need,0,sizeof(need));for (int i=1;i<=n;i++)scanf("%d%I64d",&pl[i].pay,&pl[i].t);for (int i=1;i<=m;i++){scanf("%d%d",&profit[i],&rem[i]);for (int j=1;j<=rem[i];j++){scanf("%d",&x);need[i][x] = true;}}LL l=0,r = 0X3f3f3f3f3f3f3f3f ,ans = -1;for (;l<r;){LL mid = (l+r)>>1;int cur = check(mid);if (cur >= L){ans=mid;r=mid;}else l = mid + 1;}if (ans == -1) puts("impossible");else printf("%I64d %d\n",ans,check(ans));}return 0;
}

hdu5855二分+最大流相关推荐

  1. POJ 2112 Optimal Milking(二分+最大流)

    POJ 2112 Optimal Milking 题目链接 题意:给定一些机器和奶牛,在给定距离矩阵,(不在对角线上为0的值代表不可达),每一个机器能容纳m个奶牛.问全部奶牛都能挤上奶,那么走的距离最 ...

  2. POJ3228二分最大流

    题意:       有n个点,每个点有两个权值,金子数量还有仓库容量,金子可以存在自己的仓库里或者是别的仓库里,仓库和仓库之间有距离,问所有金子都必须存到库里最大距离的最小是多少? 思路:       ...

  3. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  4. P4068-[SDOI2016]数字配对【二分,费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P4068 题目大意 nnn种数字,第iii个是aia_iai​,有bib_ibi​个,价值为ci∗cjc_i*c_j ...

  5. HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流...

    题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    ...

  6. HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)

    题意:n 个男生.n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚:对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友.每次游戏女生会找一 ...

  7. POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)

    题意:       有n头猪,m个猪圈,每个猪圈都有一定的容量(就是最多能装多少只猪),然后每只猪对每个猪圈的喜好度不同(就是所有猪圈在每个猪心中都有一个排名),然后要求所有的猪都进猪圈,但是要求所有 ...

  8. POJ 3228 二分最大流

    题意:       给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路:      比较简单的一个题, ...

  9. poj2112 二分最大流+Floyd

    题意:      一个农场主有一些奶牛,和一些机器,每台机器有自己的服务上限,就是一天最多能给多少头奶牛挤奶,给你任意两点的距离,问你让所有的奶牛都被挤奶时,奶牛于机器最远距离的最近是多少. 思路: ...

  10. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

最新文章

  1. 关于iOS7以后版本号企业公布问题
  2. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
  3. volatile关键字解析~高级java必问
  4. linux更改nginx最大访问数,Linux下nginx服务的配置文件nginx.conf中模块的讲解之配置limit_conn_zone来限制并发连接数以及下载速率...
  5. 获取zabbix监控数据
  6. 专业英语笔记:Spring框架
  7. 学习Python语言的优势
  8. [原创]全球首款不使用ViewState的Asp.Net2.0控件库
  9. shopex 网店系统 v4.8.5 安装图文教
  10. 富士通Fujitsu DPK8510E 打印机驱动
  11. 【OpenCV】障碍物提取
  12. ~囍~ Evening Star 篇
  13. Mybatis在xml文件中处理大于号小于号的方法
  14. Android 修改手机状态栏文字颜色
  15. python解法:【PAT520砖石争霸赛】7-2真的恭喜你(10)
  16. 四阶魔方java1002四阶魔方java_4x4四阶魔方一看就懂,超简单入门图文教程2:复原中心块...
  17. DENO 1.10发行说明
  18. BarTender 打印机的控制详解
  19. 不是所有产品都适合做亚马逊CPC广告
  20. STM32驱动74HC165原理图加程序

热门文章

  1. 这位日本网友和谷歌街景的故事,感动了58万人
  2. Category底层原理实现
  3. MQTT断线重连及订阅消息恢复
  4. python爬虫数据可视化豆瓣评分top250_Python数据可视化:豆瓣电影TOP250
  5. 实习面试感悟-阿里云
  6. 入职东北国企做程序员一个月,感受如何?
  7. 怎么修改ftp服务器被动端口,ftp服务器改为被动模式
  8. Linux命令之新增组groupadd
  9. PC端浏览器如何访问微信小程序
  10. 移动MM要走进大学!