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

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std;
#define INF 0x3fffffff
#define maxn 8000
typedef long long sint;
struct node
{int v,c,next;
}e[222222];
int q[999999];
int first[maxn],n,m,dis[maxn],st,ed,en;
int vi[maxn],vo[maxn],flag;
void init()
{en=0;memset(first,-1,sizeof(first));memset(vi,-1,sizeof(vi));memset(vo,-1,sizeof(vo));st=n+1;ed=n+2;
}
void add(int a,int b,int c)
{e[en].v=b;e[en].c=c;e[en].next=first[a];first[a]=en;en++;e[en].v=a;e[en].c=0;e[en].next=first[b];first[b]=en;en++;
}
bool bfs()
{memset(dis,-1,sizeof(dis));int tail=1;int head=1;tail++;q[tail]=st;dis[st]=0;while(head<tail){head++;int u=q[head];for(int i=first[u];i!=-1;i=e[i].next){if(!e[i].c||dis[e[i].v]!=-1) continue;dis[e[i].v]=dis[u]+1;if(e[i].v==ed){return true;}tail++;q[tail]=e[i].v;}}return false;
}
int dfs(int x,int mx)
{if(x==ed||mx==0) return mx;int f,flow=0,v,ret=0;for(int i=first[x];i!=-1;i=e[i].next){v=e[i].v;if(dis[x]+1!=dis[v]) continue;if((f=dfs(v,min(mx,e[i].c)))){e[i].c-=f;e[i^1].c+=f;flow+=f;ret+=f;mx-=f;if(!mx) break;}}if(ret==0) dis[x]=-1;return flow;
}
int dinic()
{int tmp=0,maxflow=0;while(bfs()){while((tmp=dfs(st,INF)))maxflow+=tmp;}return maxflow;
}
struct edge
{int u,v,val1,val2;
}g[maxn];
void build(int lim)
{for(int i=1;i<=m;i++){if(g[i].val1<=lim&&g[i].val2<=lim){vi[g[i].v]++;vo[g[i].u]++;add(g[i].u,g[i].v,1);}else if(g[i].val1>lim&&g[i].val2>lim){flag=0;return;}else if(g[i].val1<=lim&&g[i].val2>lim){vi[g[i].v]++;vo[g[i].u]++;}else if(g[i].val1>lim&&g[i].val2<=lim){vi[g[i].u]++;vo[g[i].v]++;}}
}
void judge()
{int sum=0;if(!flag) return ;for(int i=1;i<=n;i++){if(abs(vi[i]-vo[i])%2!=0){flag=0;return;}if(vo[i]-vi[i]>0){add(st,i,(vo[i]-vi[i])/2);sum+=(vo[i]-vi[i])/2;}if(vo[i]-vi[i]<0){add(i,ed,(vi[i]-vo[i])/2);}}if(dinic()!=sum) flag=0;
}
int main()
{int a,b,c,d;scanf("%d%d",&n,&m);int ll=0x3f3f3f3f,rr=0,mid,ans=-1;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&g[i].u,&g[i].v,&g[i].val1,&g[i].val2);rr=max(rr,max(g[i].val1,g[i].val2));ll=min(ll,min(g[i].val1,g[i].val2));}while(ll<=rr){mid=(ll+rr)>>1;init();flag=1;build(mid);judge();if(flag){ans=mid;rr=mid-1;}else ll=mid+1;}if(ans!=-1)printf("%d\n",ans);elseprintf("NIE\n");return 0;
}

bzoj2095: [Poi2010]Bridges 二分+最大流相关推荐

  1. BZOJ 2095 [Poi2010]Bridges 二分 最大流(混合图欧拉回路)

    题目大意:给出一张n个点m条边的联通图,无重边,每条边有正反两个权值.现要从点1出发经过每条边每个点一次,问最大边权最小是多少. 最大最小容易想到二分,问题是如何判断是否有欧拉回路. 图不连通自然没有 ...

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

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

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

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

  4. BZOJ2095[Poi2010] Bridges

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

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

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

  6. bzoj2095 [Poi2010]Bridges

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

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

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

  8. 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)

    好厉害的题啊QAQ,并不会做. 最大值最小想到是二分,然后就是一个混合图欧拉回路的问题. 混合图欧拉回路问题的解决: 我们首先想到有向图的欧拉回路,需满足的条件是每个点的入度等于出度.那么对于一个混合 ...

  9. POJ 2112 Optimal Milking(二分+最大流)

    POJ 2112 Optimal Milking 题目链接 题意:给定一些机器和奶牛,在给定距离矩阵,(不在对角线上为0的值代表不可达),每一个机器能容纳m个奶牛.问全部奶牛都能挤上奶,那么走的距离最 ...

最新文章

  1. [自动化]Puppet服务安装和部署
  2. 【AS3代码】隐藏原有鼠标箭头,并自定义鼠标小箭头
  3. Python 爬虫 大量数据清洗 ---- sql语句优化
  4. FPGA时序约束、时序分析(一)
  5. vivo X30 5G版现身Geekbench:搭载三星Exynos 980
  6. 设备名称和设备责任人输出写反了,重新写了,重新发送邮箱
  7. 力扣 两两交换链表中的节点
  8. Bailian2687 数组逆序重放【逆序处理】
  9. 过去的七天我是这样过的
  10. 定向搜索(beam search)
  11. 第九期 HG255d硬件分析 《路由器就是开发板》
  12. 在c语言中有函数leapyear定义如下,职业教育概论——职业教育的发展历史超星尔雅答案题库...
  13. 沟通CTBS助×××系统巨头解决南北互通问题
  14. 2016年上半年系统集成中项4月6日作业
  15. netbeans 8 java自动提示_Netbeans 代码提示
  16. 程序猿菜鸟打怪升级—一路火花带闪电
  17. (二)安装SVN服务器,web管理界面
  18. 【JS】console.log()打印出五彩斑斓的黑
  19. Windows 此电脑->设备与驱动器->图标管理
  20. java怎样实现换肤功能_JavaScript实现换肤功能

热门文章

  1. 使用Mybatis时, 在*Mapper.xml中出现大于号小于号的问题及两种解决方案
  2. 计算机硬件测试报告,电脑硬件测试软件(HDBENCH)
  3. caffe模型训练与使用(windows平台)
  4. Python-Flask开发微电影网站(五)
  5. TPshop项目步骤(一)
  6. dede服务器建站_如何用DEDECMS建站的详细新手指南
  7. 过拟合解决方案 —— early stopping
  8. 系统设计模板该怎么写
  9. Realsense深度相机+pyqt5+应用案例(基础篇2)
  10. python dataframe取行列_dataframe取元素方法总结