题目链接:点击查看

题目大意:给出n个处理器和m个任务,每个任务给出可以运行的两个处理器,只需要其中一个处理器完成即可, 问如何分配处理方案,能使得n个处理器中处理任务最多的处理器所处理的任务最少

题目分析:求最大值的最小值,典型的二分,只不过套了个网络流,二分枚举答案,建图跑网络流根据是否满流来判断是否满足条件即可

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e4+100;struct Edge
{int to,w,next;
}edge[N*4];//边数int n,m,head[N],cnt;struct Node
{int a,b;void input(){scanf("%d%d",&a,&b);}
}a[N];void addedge(int u,int v,int w)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].to=u;edge[cnt].w=0;//反向边边权设置为0edge[cnt].next=head[v];head[v]=cnt++;
}int d[N],now[N];//深度 当前弧优化bool bfs(int s,int t)//寻找增广路
{memset(d,0,sizeof(d));queue<int>q;q.push(s);now[s]=head[s];d[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(d[v])continue;if(!w)continue;d[v]=d[u]+1;now[v]=head[v];q.push(v);if(v==t)return true;}}return false;
}int dinic(int x,int t,int flow)//更新答案
{if(x==t)return flow;int rest=flow,i;for(i=now[x];i!=-1&&rest;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(w&&d[v]==d[x]+1){int k=dinic(v,t,min(rest,w));if(!k)d[v]=0;edge[i].w-=k;edge[i^1].w+=k;rest-=k;}}now[x]=i;return flow-rest;
}void init()
{memset(now,0,sizeof(now));memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{int ans=0,flow;while(bfs(st,ed))while(flow=dinic(st,ed,inf))ans+=flow;return ans;
}bool check(int x)
{init();int st=N-1,ed=st-1;for(int i=1;i<=n;i++)//处理器 addedge(st,i,x);for(int i=1;i<=m;i++)//任务 {addedge(i+n,ed,1);addedge(a[i].a,i+n,inf);addedge(a[i].b,i+n,inf);}return solve(st,ed)==m;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)a[i].input();int l=0,r=inf,ans;while(l<=r){int mid=l+r>>1;if(check(mid)){ans=mid;r=mid-1;}elsel=mid+1;}printf("%d\n",ans);}return 0;
}

UVALive - 3231 Fair Share(最大流+二分)相关推荐

  1. fair share用法

    Listen. As someone who's seen more than her fair share of bad beef, I'll tell you: that is not such ...

  2. BZOJ 1305 dance跳舞(最大流+二分答案)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1305 解题思路: 转自:https://blog.csdn.net/u012288458 ...

  3. HDU - 3126 Nova(最大流+二分+简单几何)

    题目链接:点击查看 题目大意:给出一个二维平面坐标系,其中有n个巫师,m个敌人,以及k棵树,规定每个巫师都有一个攻击范围,可以攻击以巫师为圆心,以攻击范围为半径,形成的圆内的所有敌人,对于每棵树都有一 ...

  4. BZOJ2406矩阵——有上下界的可行流+二分答案

    题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...

  5. poj2112(网络流-最大流+二分)

    题意:给你k个挤奶器,c头牛,每个挤奶器能放m头牛,问你奶牛需要走的最大距离最小是多少: 解题思路:因为最大距离最小,也就是求最小的距离满足所有牛都能到,所以我们先用floyd跑最短路,把所有点之间的 ...

  6. 【BZOJ - 3993】星际战争(网络流最大流+二分)

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

  7. Codeforces Round #770 (Div. 2) E. Fair Share(欧拉回路)

    题目 m(1<=m<=1e5)个数组,第i个数组的长度为ni(2<=ni<=2e5,ni为偶数) 第i个数组内的第j个值aij(1<=aij<=1e9),sumni ...

  8. E. Fair Share (思维,欧拉回路)

    题目 https://codeforces.com/contest/1634/problem/E 题意大概:给出 m 个偶数长度的数字串,要你把全部数字分到两个集合(L, R)中,使得每个串中一半数字 ...

  9. CF1634E Fair Share

    题目描述 题解 显然,如果一个数字出现的次数是奇数就是 NO\text{NO}NO . 然后如果一个数列的 L\text{L}L 和 R\text{R}R 的数量要相同,可以看成是在一张图上,一入一出 ...

最新文章

  1. mybatis使用注解替代xml配置,动态生成Sql
  2. Python学习--环境搭建
  3. 【Qt】QModbusDataUnit类
  4. 可能是目前最详细的Redis内存模型及应用解读
  5. php hash代码下载,PHP中的哈希表 hash_insert
  6. Jenkins学习二:Jenkins安装与配置
  7. 【语音加密】基于matlab混沌+AES语音加密解密【含Matlab源码 1593期】
  8. Sping AOP概述
  9. 利用python实现词频统计
  10. 将服务注册到eureka服务端
  11. 诺,你们要的Python进阶来咯!我还没见过比这全面的!
  12. Flask + vue 前后端分离的 二手书App
  13. 【编程游戏】贺岁霓虹灯。(参观366楼xiuyouxu的霓虹灯)
  14. 噪声来源、定义及影响【转自微信公众号微波射频网】
  15. 数据的增量采集与全量采集
  16. 王天羲:构建以客户中心的全整合企业
  17. 听说现在赶火车刷脸就进站了!Out,跟脸有关的最新玩法是你说什么,表情包就演什么
  18. 2021级新生程序设计班级天梯赛:1-6 《从你的全世界路过》
  19. JAVA 车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。
  20. 连连看连接算法Javascript版

热门文章

  1. 使用CORS解决同源限制
  2. 手写自己的MyBatis框架-支持插件
  3. MyBatis关键配置-创建会话工厂
  4. Quartz Java编程
  5. 什么时候清理物理消息文件?
  6. 品牌管理-JSR303数据校验
  7. 通过反射获取无参构造方法并使用
  8. map和reduce
  9. 响应json数据之过滤静态资源
  10. plsql中的if判断