题意:在通讯录中有N个人,每个人能可能属于多个group,现要将这些人分组m组,设各组中的最大人数为max,求出该最小的最大值

下面用的是朴素的查找,核心代码find_path复杂度是VE的,不过据说可以用DINIC跑二分图可以得到sqrt(v)*E的

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf =0x7f7f7f7f;
const double pi=acos(-1);
const int maxn=100000; int n,m,k;
int mp[1005][505],link[505][1005],num[505],vis[505];
char s[20],c; bool find_path(int u,int mid)
{
for(int v=0;v<m;v++)
if(mp[u][v]&&!vis[v])
{
vis[v]=1;
if(num[v]<mid)
{
link[v][++num[v]]=u;
return true;
}
for(int i=1;i<=num[v];i++)
if(find_path(link[v][i],mid))
{
link[v][i]=u;
return true;
}
//vis[v]=0;这个地方不能将vis[v]清0,否则将多次重复计算,从而超时
//事实上只要右边的点检查过一次无法再匹配了,以后就都不行了
}
return false;
} bool ok(int mid)
{
MM(link,0);
MM(num,0);
for(int u=0;u<n;u++)
{
MM(vis,0);
if(!find_path(u,mid))
return false;
}
return true;
} int main()
{
while(~scanf("%d %d",&n,&m)&&(n||m))
{
MM(mp,0); for(int i=0;i<n;i++)
{
scanf("%s",s);
while(~scanf("%c",&c))
{
if(c=='\n') break;
scanf("%d",&k);
mp[i][k]=1;
}
} int l=-1,r=n+1;
while(r-l>1)
{
int mid=(l+r)>>1;
if(ok(mid)) r=mid;
else l=mid;
}
printf("%d\n",r);
}
return 0;
}

  

POJ 2289 多重二分匹配+二分 模板的更多相关文章

  1. POJ-1274The Perfect Stall,二分匹配裸模板题

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23313   Accepted: 103 ...

  2. poj 2239 Selecting Courses(二分匹配简单模板)

    http://poj.org/problem?id=2239 这里要处理的是构图问题p (1 <= p <= 7), q (1 <= q <= 12)分别表示第i门课在一周的第 ...

  3. fafu 1568 Matrix(二分匹配+二分)

    Description:   You are given a matrix which <= n <= m <= ). You are supposed to choose n el ...

  4. ZOJ 3156 Taxi (二分匹配+二分查找)

    题目链接:Taxi Taxi Time Limit: 1 Second      Memory Limit: 32768 KB As we all know, it often rains sudde ...

  5. zoj 2362 Beloved Sons【二分匹配】

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2361 来源:http://acm.hust.edu.cn/vjudg ...

  6. POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment

    这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...

  7. Poj 2289 Jamie's Contact Groups (二分+二分图多重匹配)

    题目链接: Poj 2289 Jamie's Contact Groups 题目描述: 给出n个人的名单和每个人可以被分到的组,问将n个人分到m个组内,并且人数最多的组人数要尽量少,问人数最多的组有多 ...

  8. POJ 2289(多重匹配+二分)

    POJ 2289(多重匹配+二分) 把n个人,分到m个组中.题目给出每一个人可以被分到的那些组.要求分配完毕后,最大的那一个组的人数最小. 用二分查找来枚举. #include<iostream ...

  9. POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】

    Jamie's Contact Groups Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

随机推荐

  1. lua基础学习(二)

    一,Lua变量   1.lua变量的三种类型:全局变量,局部变量,表中的域 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量. 局部变量的作用域为从声明位置 ...

  2. 将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式

    public class DemoClass { /// <summary> /// 通过Lambda表达式,在构造函数中赋初始值 /// </summary> /// < ...

  3. HDU-4219-Randomization?

    题目描述 给定一棵\(n\)个节点的树,每条边的权值为\([0,L]\)之间的随机整数,求这棵树两点之间最长距离不超过\(S\)的概率. Input 第一行三个整数\(n,L,S\) 接下来n-1行, ...

  4. python 类(2)

    """ """class BaseCat(object): """ 猫科基础类""&quo ...

  5. python网络爬虫(2)回顾Python编程

    文件写入 def storFile(data,fileName,method='a'): with open(fileName,method,newline ='') as f: f.write(da ...

  6. TypeError: esri.layers.WMSLayer is not a constructor

    最近加载wms地图后,总是报这个错误,因为错误,导致后续的代码无法加载,导致无法功能使用. 原因是,由于方法公用,有的新功能在使用时,引用依赖包时,未引用完整,导致加载此处加载wms图层的时候, 报此 ...

  7. 84. Largest Rectangle in Histogram (JAVA)

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  8. C++有静态成员变量的类继承

    声明和定义 1.变量的定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 2.变量的声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只 ...

  9. 2019-11-29-dotnet-获取指定进程的输入命令行

    title author date CreateTime categories dotnet 获取指定进程的输入命令行 lindexi 2019-11-29 08:35:11 +0800 2019-0 ...

  10. oracle分页查询按日期排序失败问题

    今天对已经上线的代码进行测试,结果发现分页是失效的,一度怀疑是前台页面分页失效,排查后发现是分页sql有问题,分页sql按日期排序,导致分页失败. 按日期排序,会造成相同的数据重复出现. 解决方案:在 ...