loj 1156(二分+最大流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26870
思路:由于溢出问题,wa了半天,还以为构图错了呢,查了半天!一看到最大最小问题,就应该想到二分,二分最大距离,然后建图跑最大流验证。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- using namespace std;
- #define MAXN 222
- #define MAXM 222222
- #define inf 1<<30
- #define FILL(a,b) memset(a,b,sizeof(a))
- struct Edge{
- int v,cap,next;
- }edge[MAXM];
- int n,D,vs,vt,NV,NE;
- int head[MAXN];
- void Insert(int u,int v,int cap)
- {
- edge[NE].v=v;
- edge[NE].cap=cap;
- edge[NE].next=head[u];
- head[u]=NE++;
- edge[NE].v=u;
- edge[NE].cap=;
- edge[NE].next=head[v];
- head[v]=NE++;
- }
- int level[MAXN],gap[MAXN];
- void bfs(int vt)
- {
- FILL(level,-);
- FILL(gap,);
- queue<int>que;
- que.push(vt);
- level[vt]=;
- gap[]++;
- while(!que.empty()){
- int u=que.front();
- que.pop();
- for(int i=head[u];i!=-;i=edge[i].next){
- int v=edge[i].v;
- if(level[v]!=-)continue;
- level[v]=level[u]+;
- gap[level[v]]++;
- que.push(v);
- }
- }
- }
- int pre[MAXN],cur[MAXN];
- int SAP(int vs,int vt)
- {
- bfs(vt);
- memcpy(cur,head,sizeof(head));
- int u=pre[vs]=vs,aug=inf,maxflow=;
- gap[]=NV;
- while(level[vs]<NV){
- bool flag=false;
- for(int &i=cur[u];i!=-;i=edge[i].next){
- int v=edge[i].v;
- if(edge[i].cap>&&level[u]==level[v]+){
- flag=true;
- aug=min(aug,edge[i].cap);
- pre[v]=u;
- u=v;
- if(v==vt){
- maxflow+=aug;
- for(u=pre[u];v!=vs;v=u,u=pre[u]){
- edge[cur[u]].cap-=aug;
- edge[cur[u]^].cap+=aug;
- }
- aug=inf;
- }
- break;
- }
- }
- if(flag)continue;
- int minlevel=NV;
- for(int i=head[u];i!=-;i=edge[i].next){
- int v=edge[i].v;
- if(edge[i].cap>&&level[v]<minlevel){
- minlevel=level[v];
- cur[u]=i;
- }
- }
- if(--gap[level[u]]==)break;
- level[u]=minlevel+;
- gap[level[u]]++;
- u=pre[u];
- }
- return maxflow;
- }
- struct Node{
- int d;
- char flag;
- }node[MAXN];
- void Build(int limit)
- {
- NE=;
- vs=,vt=*n+,NV=vt+;
- FILL(head,-);
- for(int i=;i<=n;i++){
- if(node[i].flag=='B')Insert(i,i+n,);
- else if(node[i].flag=='S')Insert(i,i+n,);
- }
- for(int i=;i<=n;i++){
- for(int j=i+;j<=n;j++){
- if(node[j].d-node[i].d<=limit){
- Insert(i+n,j,);
- }
- }
- }
- for(int i=;i<=n;i++){
- if(node[i].d<=limit)Insert(vs,i,);
- if(D-node[i].d<=limit)Insert(i+n,vt,);
- }
- if(D<=limit)Insert(vs,vt,);
- }
- int main()
- {
- int _case,t=;
- char str[];
- scanf("%d",&_case);
- while(_case--){
- scanf("%d%d",&n,&D);
- for(int i=;i<=n;i++){
- scanf("%s",str);
- sscanf(str,"%c-%d",&node[i].flag,&node[i].d);
- }
- int low=,high=D,mid,ans;
- while(low<=high){
- mid=(low+high)>>;
- Build(mid);
- if(SAP(vs,vt)>=){
- ans=mid;
- high=mid-;
- }else
- low=mid+;
- }
- printf("Case %d: %d\n",t++,ans);
- }
- return ;
- }
loj 1156(二分+最大流)的更多相关文章
- loj 1167(二分+最大流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26881 思路:我们可以二分最大危险度,然后建图,由于每个休息点只能 ...
- uvalive 3231 Fair Share 公平分配问题 二分+最大流 右边最多流量的结点流量尽量少。
/** 题目: uvalive 3231 Fair Share 公平分配问题 链接:https://vjudge.net/problem/UVALive-3231 题意:有m个任务,n个处理器,每个任 ...
- poj 2391 Ombrophobic Bovines 最短路 二分 最大流 拆点
题目链接 题意 有\(n\)个牛棚,每个牛棚初始有\(a_i\)头牛,最后能容纳\(b_i\)头牛.有\(m\)条道路,边权为走这段路所需花费的时间.问最少需要多少时间能让所有的牛都有牛棚可待? 思路 ...
- HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流
题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others) ...
- HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流
二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...
- hdu4560 不错的建图,二分最大流
题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...
- POJ3228二分最大流
题意: 有n个点,每个点有两个权值,金子数量还有仓库容量,金子可以存在自己的仓库里或者是别的仓库里,仓库和仓库之间有距离,问所有金子都必须存到库里最大距离的最小是多少? 思路: ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图
这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...
随机推荐
- C# 集合扩展快速排序算法
/// <summary> /// 对集合进行排序,如 /// List<Person> users=new List<Person>(){.......} /// ...
- ls -alrth 及ls 详解
idcdpi 抓包过程中 用了命令 ls - alrth :命令,所以回头重新学习 ls命令 linux ls和 ll 命令 标签: linuxsocketssolarisbash出版扩展 2 ...
- NAT/PAT
NAT/PAT 编辑 NAT就是网络地址翻译的英文缩写,在路由器上配置NAT服务,可提供公司内100~200人同时上网的服务.不需要Proxy Server,所有的服务都可顺利使用(除Netmeeti ...
- ThinkPHP访问不存在的模块跳到404页面
在ACTION中新建一个文件EmptyAction.class.php,文件中的代码如下: <?php class EmptyAction extends Action{ functio ...
- cocos基础教程(4)基础概念介绍
在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于 ...
- 在C#中开启事务
1.为什么要开启事务: 举一个简单的例子:在银行业务中,有一条记账原则,即又借有贷.为了保证这种原则,每发生一笔银行业务,就必须保证会计账目上借方科目和贷方科目至少个少一笔,并且这两笔要么同时成功,要 ...
- KMP算法精髓
这个算法的做法就是在部分匹配的时候,常规想法是向后移动一位,但是KMP想法是向后移动n位(n=m-L). 注释:这里m表示已经匹配了的字符的个数,L表示已经匹配了的那些字符组成的这个字符串的前缀和后缀 ...
- Phpstorm常用设置
Phpstorm更换主题和字体 1.File -- settings -- Editor -- Colors And Fonts: 2.在右侧窗口中选择Scheme name : 选择一个自己喜欢的主 ...
- angular 监听ng-repeat结束时间
有些时候我们想要监听angular js中的 ng-repeat结束事件,从而好初始化一些我们的第三方或者其他需要初始化的js. 我们可以这样处理: js 中这样定义 : //监听事件 是否加载完毕a ...
- NYOJ 5 字符串处理 find()函数应用
http://acm.nyist.net/JudgeOnline/problem.php?pid=5 #include<stdio.h> #include<iostream> ...