题意:从M个参赛选手中选一些人参加N轮比赛,每场比赛只能有一个人胜出,问如何安排比赛,让获胜最多的那个人获胜次数最少。

构图:二分次数,用最大流判可行性。

源点向参赛人员连容量为该参赛人员最多获胜次数的边,二分限制参赛人员的最多获胜次数;

比赛向汇点连容量为每场比赛最多有几人胜出的边;

参赛人员分别向自己所参加的比赛连容量为1的边。

View Code

/*Source Code
Problem: 1003
Username: 2010201211
Run Time: 736MS
Memory: 1084K
Language:C++
JudgeStatus: Accepted*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define E 60000
#define V 700
#define inf 0x3F3F3F3F
struct Edge
{int u,v,c,next;
}edge[E*2];
int cnt;
int dist[V];
int head[V];
int que[V];
int sta[V];void init(){cnt=0;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int c){edge[cnt].u=u;edge[cnt].v=v;edge[cnt].c=c;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].u=v;edge[cnt].v=u;edge[cnt].c=0;edge[cnt].next=head[v];head[v]=cnt++;
}int dinic(int s,int t){int ans=0;while(true){int left,right,u,v;memset(dist,-1,sizeof(dist));left=right=0;que[right++]=s;dist[s]=0;while(left<right){//bfs构造层次网络u=que[left++];for(int k=head[u];k!=-1;k=edge[k].next){u=edge[k].u;v=edge[k].v;if(edge[k].c>0 && dist[v]==-1){dist[v]=dist[u]+1;que[right++]=v;if(v==t){left=right;break;}}}}if(dist[t]==-1) break;//汇点不在层次网络中,算法结束.int top=0;int now=s;while(true){//层次图中进行一次dfs增广if(now!=t){//dfs未到汇点int k;for(k=head[now];k!=-1;k=edge[k].next){//判断now之后是否有可用点(入度是否为0)if(edge[k].c>0 && dist[edge[k].u]+1==dist[edge[k].v]) break;}if(k!=-1){//如果now之后有可用点(入度>0)//cout << top << endl;sta[top++]=k;//边入栈now=edge[k].v;}else{//now之后没有可用点if(top==0) break;dist[edge[sta[--top]].v]=-1;//从p和层次图中删除点u以及u连接的所有边
now=edge[sta[top]].u;}}else{//dfs到汇点int flow=inf,ebreak;//(1)增广pfor(int i=0;i<top;i++){if(flow>edge[sta[i]].c){flow=edge[sta[i]].c;ebreak=i;}}ans+=flow;for(int i=0;i<top;i++){edge[sta[i]].c-=flow;//正向边减流edge[sta[i]^1].c+=flow;//反向边加流
                }//(2)退至p中从源点可到达的最后一个顶点now=edge[sta[ebreak]].u;top=ebreak;}}}return ans;
}int main()
{//freopen("in.txt","r",stdin);int n,m,k,cptor[105],a,map[505][105];while(scanf("%d%d",&n,&m)!=EOF){memset(cptor,0,sizeof(cptor));memset(map,0,sizeof(map));for(int i=1;i<=n;i++){scanf("%d",&k);for(int j=1;j<=k;j++){scanf("%d",&a);map[i][a]=1;cptor[a]++;}}int maxc=-1;for(int i=1;i<=m;i++){maxc=max(maxc,cptor[i]);}int mid,log=0;int left=0,right=maxc+1;while(left<right){mid=(left+right)/2;init();for(int i=1;i<=m;i++){if(cptor[i]>mid) addedge(0,i,mid);else addedge(0,i,cptor[i]);for(int j=1;j<=n;j++){if(map[j][i]==1){addedge(i,m+j,1);}}}for(int i=1;i<=n;i++){addedge(m+i,m+n+1,1);}int res=dinic(0,m+n+1);if(res==n) {right=mid;log=mid;}else left=mid+1;}printf("%d\n",log);}return 0;
}

转载于:https://www.cnblogs.com/markliu/archive/2012/06/07/2540986.html

2011东北地区赛G题(二分-网络流判可行性)相关推荐

  1. CCPC2019吉林省赛东北地区赛游记

    Preface 第一次打正式的线下赛 三天,两场热身赛两场正赛,有点累 Day 0 一大早从大学城叫滴滴去车站,差点迟到qwq 长春居然有早高峰堵车这种东西噗噗噗,最后勉强赶上了 在宾馆住下后带队老师 ...

  2. 2011年国赛B题论文研读

    本文知识点速查 0-1规划.线性加权评价.权重确定 一.2011年国赛B题的要求 2011年国赛B题的概括如下. 试就某市(有六个区,分别为A,B,C,D,E,F)设置交巡警服务平台的相关情况,建立数 ...

  3. 2020icpc上海赛G题 Fibonacci详解

    Fibonacci(icpc2020上海赛) 链接:icpc2020上海赛G题Fibonacci 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语 ...

  4. 5_竞赛无人机搭积木式编程——以2021年电赛G题植保无人机国奖标准完整复现为例学习

    竞赛无人机搭积木式编程 --以2021年电赛G题植保无人机国奖标准完整复现为例学习 首先我们需要了解下自动飞行任务执行过程几组关键变量的用法与实际作用效果: flight_subtask_cnt用于控 ...

  5. 华为杯数学建模优秀论文_数学建模经典例题(2011年国赛A题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 试题中的附件1.2和3请点击"阅读原文"查看 相关推荐数学建模经典例题(2000年国赛A题与优秀论文)数学建模经典例 ...

  6. 2015北京网络赛 G题 Boxes bfs

    Boxes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingonl ...

  7. 2017ACM-ICPC北京区域现场赛 G题 hihocoder1633

    传送门:点击打开链接 题意:一个N*N的网格,从左下角走到右上角需要的最短步数.要求不能经过# 而且路径不能经过一个三角形的内部,可以沿边走. 分析:计算几何题里不算难题,但若没想到坑点就一直卡题了. ...

  8. hihoCoder - 1633(2017北京icpc现场赛-G题)

    题意:给你一个三角形的三个坐标,还有一张图,让你从图中的左下角走到右上角,左下角坐标是(0,0),每两点之间的长度是1,'.'代表能走,'#'代表不能走,并且每条路径不能碰到三角形内部,让你求最短路径 ...

  9. Little Sub and Piggybank (杭师大第十二届校赛G题) DP

    题目传送门 题意:每天能往存钱罐加任意实数的钱,每天不能多于起那一天放的钱数.如果某一天的钱数恰好等于那天的特价商品,则可以买,求最后的最大快乐值. 思路:先来一段来自出题人的题解: 显然的贪心:如果 ...

最新文章

  1. 2023 USNews全美计算机研究生院排名发布!MIT、CMU分别称霸总榜和AI分榜
  2. Scrum工具Leangoo产品白皮书
  3. 快手八卦!突破TensorFlow、PyTorch并行瓶颈的开源分布式训练框架来了!
  4. ubuntu 12.04 php mysql_Ubuntu 12.04下LAMP安装配置
  5. HDU 4121 Xiangqi
  6. CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四)
  7. role menu for SAP_UI2_ADMIN_700
  8. 微信小程序实战开发视频
  9. 沈阳大学计算机考研,计算机专业考研成功经验谈:掌握方法,以不变应万变
  10. (转载)C语言右移运算符的问题(特别当与取反运算符一起时)
  11. MATLAB rolcus函数,自动控制原理实验报告 .doc
  12. 特斯拉皮卡,会大卖吗?
  13. struts框架的原理和应用_分布式开源调度框架TBSchedule原理与应用
  14. Python 程序设计方法
  15. erlang连接数据库mysql_[原]Erlang连接mysql问题解决
  16. 51单片机99秒倒计时C语言程序,单片机课程设计-99秒倒计时
  17. (转)JSP详细教程
  18. 统考计算机各题型分数,计算机等级考试分值
  19. zigbee学习之JN5169系统控制器
  20. 男生女生,呸,男生女生呸铃声 男生女生,呸,男生女生呸手机...

热门文章

  1. Java编程的逻辑 (56) - 文件概述
  2. Spring Mvc 入门Demo
  3. Silverlight 属性样式、控件模板、视觉状态
  4. python glob用法_glob模块使用教程
  5. devops 三十六计_DevOps从业人员应遵循的16个博客和新闻通讯
  6. galago 介绍_赢得预装Linux的System76 Galago Pro笔记本电脑
  7. ebook_7种开放式eBook格式指南
  8. 前端:JS/30/综合实例:选项卡(HTML,CSS,JS)
  9. Bootstrap3 滚动监听插件的事件
  10. CSS UI状态伪类选择器