最大值最小,是二分

转化为判定问题:给定一个混合图,问是否存在欧拉回路

首先,有向图存在欧拉回路的充要条件是每个点的入度等于出度,现在我们有一个混合图,我们要做的就是给其中的无向边定向,使得它变成有向图之后存在欧拉回路

记点$x$的入度为$in_x$,出度为$out_x$,我们的目标是使得每个点$x$满足$in_x-out_x=0$

先随便给每条无向边定向,这样不一定满足要求,所以我们必须让某些边反向,反向$a\rightarrow b$会让$in_a-out_a$增加$2$,让$in_b-out_b$减少$2$,所以如果存在$in_x-out_x\equiv1(\text{mod }2)$那么无解

为了决定是否反向某些无向边,我们这样建图:

对于$in_x\lt out_x$的$x$,连边$x\rightarrow T$,容量为$\dfrac{out_x-in_x}2$

对于$in_x\gt out_x$的$x$,连边$S\rightarrow x$,容量为$\dfrac{in_x-out_x}2$

对于一条无向边,如果一开始硬点它的方向为$x\rightarrow y$,那么连边$y\rightarrow x$,权值为$1$

这样建图跑最大流,每流过一条原图中的无向边就相当于将它反向(这条无向边的两个端点的流量之和就是$\left|in_x-out_x\right|$的改变量),跑最大流是因为我们想要尽可能地缩小$in_x$和$out_x$的差距,如果满流,自然就存在欧拉回路了

#include<stdio.h>
#include<string.h>
const int inf=2147483647;
int abs(int x){return x>0?x:-x;}
int min(int a,int b){return a<b?a:b;}
int h[1010],cur[1010],nex[10010],to[10010],cap[10010],dis[1010],q[10010],M,S,T;
void add(int a,int b,int c){M++;to[M]=b;cap[M]=c;nex[M]=h[a];h[a]=M;M++;to[M]=a;cap[M]=0;nex[M]=h[b];h[b]=M;
}
bool bfs(){int head,tail,x,i;memset(dis,-1,sizeof(dis));head=tail=1;q[1]=S;dis[S]=0;while(head<=tail){x=q[head];head++;for(i=h[x];i;i=nex[i]){if(cap[i]&&dis[to[i]]==-1){dis[to[i]]=dis[x]+1;if(to[i]==T)return 1;tail++;q[tail]=to[i];}}}return 0;
}
int dfs(int x,int flow){if(x==T)return flow;int i,f;for(i=cur[x];i;i=nex[i]){if(cap[i]&&dis[to[i]]==dis[x]+1){f=dfs(to[i],min(flow,cap[i]));if(f){cap[i]-=f;cap[i^1]+=f;if(cap[i])cur[x]=i;return f;}}}dis[x]=-1;return 0;
}
int dicnic(){int ans=0,tmp;while(bfs()){memcpy(cur,h,sizeof(h));while(tmp=dfs(S,inf))ans+=tmp;}return ans;
}
int n,m,in[1010],ou[1010];
struct edge{int x,y,a,b;
}e[2010];
bool check(int lim){int i,s;memset(h,0,sizeof(h));memset(in,0,sizeof(in));memset(ou,0,sizeof(ou));M=1;for(i=1;i<=m;i++){if(e[i].a<=lim&&e[i].b<=lim){add(e[i].y,e[i].x,1);ou[e[i].x]++;in[e[i].y]++;}else if(e[i].a<=lim){ou[e[i].x]++;in[e[i].y]++;}else if(e[i].b<=lim){ou[e[i].y]++;in[e[i].x]++;}elsereturn 0;}s=0;for(i=1;i<=n;i++){if(abs(in[i]-ou[i])&1)return 0;if(in[i]<ou[i])add(i,T,(ou[i]-in[i])>>1);if(in[i]>ou[i]){add(S,i,(in[i]-ou[i])>>1);s+=(in[i]-ou[i])>>1;}}return s==dicnic();
}
int main(){int i,l,r,mid,ans;scanf("%d%d",&n,&m);for(i=1;i<=m;i++)scanf("%d%d%d%d",&e[i].x,&e[i].y,&e[i].a,&e[i].b);S=n+1;T=n+2;ans=-1;l=0;r=1000;while(l<=r){mid=(l+r)>>1;if(check(mid)){ans=mid;r=mid-1;}elsel=mid+1;}if(ans==-1)puts("NIE");elseprintf("%d",ans);
}

转载于:https://www.cnblogs.com/jefflyy/p/8905848.html

[BZOJ2095]Bridges相关推荐

  1. BZOJ2095[Poi2010] Bridges

    BZOJ2095[Poi2010] Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小 ...

  2. BZOJ2095 POI2010 Bridges 【二分+混合图欧拉回路】

    BZOJ2095 POI2010 Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛 ...

  3. bzoj2095 [Poi2010]Bridges

    bzoj [Poi2010]Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到 ...

  4. [BZOJ2095][Poi2010]Bridges 最大流(混合图欧拉回路)

    2095: [Poi2010]Bridges Time Limit: 10 Sec  Memory Limit: 259 MB Description YYD为了减肥,他来到了瘦海,这是一个巨大的海, ...

  5. Bzoj2095:[Poi2010]Bridges:混合图欧拉回路,网络流

    题目链接:2095:[Poi2010]Bridges 二分答案建图后显然是混合图的欧拉回路,有向边删掉无向边随机定向计算入度-出度的差du[i],如果du[i]<0连边(i,T,-du[i]/2 ...

  6. bzoj2095: [Poi2010]Bridges 二分+最大流

    想当年第一次看到这个题是在**p的一套模拟题里?然后当时想过二分也想过最大流.然后就是没有想到一块,最后知道做法后就不了了之了. #include <iostream> #include ...

  7. 图论欧拉回路初步 BZOJ2095 POI2010 Bridges

    反正对于现在的我来说是好题.顺便膜po大犇和dingchao大犇. 网络流什么的还是再开一个专题好了. 欧拉回路问题参考论文<欧拉回路性质与应用探究>by 仇荣琦. POI2010 题解整 ...

  8. 【BZOJ2095】【最大流】[Poi2010]Bridges 题解

    Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车从小岛1 ...

  9. HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)

    HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...

最新文章

  1. android 详解画图,android画图之贝塞尔曲线讲解详解
  2. 干货整理 Unity3D资源汇总
  3. std::vector使用简介
  4. 执行文件异常报错:ImportError: attempted relative import with no known parent package
  5. 背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)
  6. linux使用vim开启文档,linux 配置 直接用VIM默认打开文件
  7. 2020中国数字营销人才发展报告
  8. 常量数组 python_python数据科学系列:numpy入门详解教程
  9. 【Python】字符串反转
  10. android自动化测试抖音,全自动化的抖音启动速度测试
  11. JAVA中map删除键值对_以有效的方式从Map中删除多个键?
  12. 机器学习--线性回归1_线性回归-进入迷人世界的第一步
  13. EXCEL中发现不可读的内容。是否恢复此工作薄的内容?如果信任此工作薄的来源,请单击”是“
  14. DDOS流量攻击如何防御分析以及被攻击的解决方案
  15. linux运维cadn,Aprende an elaborar un amasamiento tГЎntrico citaciГіn
  16. Ajax 和 XML: 五种 Ajax 反模式
  17. 2021年安全员-C证(陕西省)考试总结及安全员-C证(陕西省)
  18. 【Python爬虫】爬取2022软科全国大学排行榜
  19. html制作登陆注册页面
  20. 速卖通按关键字搜索商品

热门文章

  1. html5实现关灯效果,《第41天:JQurey - 关灯效果》
  2. jsp到java xml配置,JSP中web配置:web.xml
  3. 6 不更新无法使用_win10更新后无线网络无法使用
  4. iphonex如何关机_iphonex常用手势操作有哪些 iphonex常用手势操作介绍【详解】
  5. alert不会影响到页面中其他代码执行_JavaScript调试技巧合集——为什么不推荐使用alert调试代码?...
  6. python字典内存分析_(一)Python入门-3序列:18字典-核心底层原理-内存分析-查找值对象过程...
  7. 【人脸表情识别】情绪识别相关会议、比赛汇总(2018-2020)
  8. 【行业进展】AI:新药研发的新纪元
  9. 谋定菲律宾农业全产业链建设 对话国际农民丰收节贸易会
  10. 【转载】一个男人关心的东西 决定了他的层次