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 ...
随机推荐
- JS实现打字机式字符输出效果
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- 利用memcached构建高性能的Web应用程序(转载)
面临的问题 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的边 ...
- H2Database数据类型
数据类型 整数(INT) 布尔型(BOOLEAN) 微整数(TINYINT) 小整数(SMALLINT) 大整数(BIGINT) 标识符(IDENTITY) 货币数(DECIMAL) 双精度实数( ...
- ETHERNET数据包格式( IP & UDP & ICMP & ARP )
ETHERNET数据包格式( IP & UDP & ICMP & ARP ) ETHERNET数据包格式 一.ETHERNET 数据包的协议类型 TYPE 的值为 0x0800 ...
- 如何在CentOS 7服务器上安装NodeJS
你可以通过运行以下命令. 1 sudo yum install epel-release 现在可以使用yum命令安装Node.js了. 1 sudo yum install nodejs 因为在开发过 ...
- CF440C
C. One-Based Arithmetic time limit per test 0.5 seconds memory limit per test 256 megabytes input st ...
- linux下Nginx服务器安装教程
序:Nginx服务器安装总结而已,不是教程. 安装的过程中出现了一些问题,原因我的云主机是纯净版,所以很多依赖包都没有.其中安装过程中就发现perl库缺少和openssl库缺少,因此我手动安装的这两款 ...
- 取地址符:&
例子: <?php $a=10; $b = &$a; echo $b; $b=15; echo $a; //结果:10和15 //当$b = &$a 时,a,b的地址相同,对a, ...
- Sed替换行和字符shell
1.在某一行后面追加一行 RD=2000sed -i '/ssi_types/ a\limit_req zone=lreq burst='$RD';' /opt/bee.location 2.替换字符 ...
- Unity3D使用小技巧
原地址:http://unity3d.9tech.cn/news/2014/0411/40178.html 1.Crtl+f摄像机自动适配场景. 2.可以用一个立方体作为底盘. 3.人物角色可以直接引 ...