Bzoj2095:[Poi2010]Bridges:混合图欧拉回路,网络流
题目链接:2095:[Poi2010]Bridges
二分答案建图后显然是混合图的欧拉回路,有向边删掉无向边随机定向计算入度-出度的差du[i],如果du[i]<0连边(i,T,-du[i]/2),否则连边(S,i,du[i]/2)并计算du[i]/2的和num,跑一边最大流答案如果等于num则此时存在回路
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
const int inf=0x7fffffff/3;
int n,m,tot,h[maxn],vis[maxn],S,T;
struct edge{int to,next,w;}G[maxn*2];
struct edges{int a,b,c,d;}e[maxn*2];
int cur[maxn],du[maxn],mx=0;
int num=0,mn=inf;void add(int x,int y,int z){G[++tot].to=y;G[tot].next=h[x];h[x]=tot;G[tot].w=z;G[++tot].to=x;G[tot].next=h[y];h[y]=tot;G[tot].w=0;
}bool bfs(){for (int i=S;i<=T;++i) vis[i]=-1;queue<int>q; q.push(S); vis[S]=0;while (!q.empty()){int u=q.front(); q.pop();for (int i=h[u];i;i=G[i].next){int v=G[i].to;if (vis[v]==-1&&G[i].w){vis[v]=vis[u]+1;q.push(v);}}}return vis[T]!=-1;
}int dfs(int x,int f){if (x==T||f==0) return f;int w,used=0;for (int i=cur[x];i;i=G[i].next)if (G[i].w&&vis[G[i].to]==vis[x]+1){w=f-used;w=dfs(G[i].to,min(w,G[i].w));G[i].w-=w; G[i^1].w+=w;if (G[i].w) cur[x]=i;used+=w; if (used==f) return f;}if (!used) vis[x]=-1;return used;
}void rebuild(int x){memset(h,0,sizeof(h)); tot=1;memset(du,0,sizeof(du)); num=0;for (int i=1;i<=m;++i){if (e[i].c<=x) du[e[i].a]--,du[e[i].b]++;if (e[i].d<=x) add(e[i].b,e[i].a,1);}for (int i=1;i<=n;++i)if (du[i]>0) num+=du[i]/2,add(S,i,du[i]/2);else if (du[i]<0) add(i,T,-du[i]/2);
}bool check(int x){rebuild(x); int ret=0;for (int i=1;i<=n;++i) if (du[i]&1) return 0;while (bfs()){for (int i=S;i<=T;++i) cur[i]=h[i];ret+=dfs(S,inf);}if (ret==num) return 1;else return 0;
}int main(){scanf("%d%d",&n,&m);S=0; T=n+1;for (int i=1;i<=m;++i){scanf("%d%d%d%d",&e[i].a,&e[i].b,&e[i].c,&e[i].d);if (e[i].c>e[i].d)swap(e[i].a,e[i].b),swap(e[i].c,e[i].d);mx=max(mx,e[i].d); mn=min(mn,e[i].c);}int l=mn,r=mx,ans=-1;while (l<=r){int mid=(l+r)>>1;if (check(mid)) r=mid-1;else l=mid+1;}if (l<mx+1) printf("%d",l);else printf("NIE");
}
Bzoj2095:[Poi2010]Bridges:混合图欧拉回路,网络流相关推荐
- BZOJ 2095: [Poi2010]Bridges 混合图欧拉回路
YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车从小岛1出发,骑过每一座桥,到达 ...
- BZOJ2095 POI2010 Bridges 【二分+混合图欧拉回路】
BZOJ2095 POI2010 Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛 ...
- 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)
好厉害的题啊QAQ,并不会做. 最大值最小想到是二分,然后就是一个混合图欧拉回路的问题. 混合图欧拉回路问题的解决: 我们首先想到有向图的欧拉回路,需满足的条件是每个点的入度等于出度.那么对于一个混合 ...
- BZOJ2095[Poi2010] Bridges
BZOJ2095[Poi2010] Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小 ...
- [BZOJ2095][Poi2010]Bridges 最大流(混合图欧拉回路)
2095: [Poi2010]Bridges Time Limit: 10 Sec Memory Limit: 259 MB Description YYD为了减肥,他来到了瘦海,这是一个巨大的海, ...
- BZOJ 2095 [Poi2010]Bridges 二分 最大流(混合图欧拉回路)
题目大意:给出一张n个点m条边的联通图,无重边,每条边有正反两个权值.现要从点1出发经过每条边每个点一次,问最大边权最小是多少. 最大最小容易想到二分,问题是如何判断是否有欧拉回路. 图不连通自然没有 ...
- 图论欧拉回路初步 BZOJ2095 POI2010 Bridges
反正对于现在的我来说是好题.顺便膜po大犇和dingchao大犇. 网络流什么的还是再开一个专题好了. 欧拉回路问题参考论文<欧拉回路性质与应用探究>by 仇荣琦. POI2010 题解整 ...
- TZOJ 2099 Sightseeing tour(网络流判混合图欧拉回路)
描述 The city executive board in Lund wants to construct a sightseeing tour by bus in Lund, so that to ...
- bzoj2095 [Poi2010]Bridges
bzoj [Poi2010]Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到 ...
最新文章
- java double转换符_java中字符串怎么转换成double类型
- python自动化测试视频百度云-Python接口自动化测试 PDF 超清版
- ad域 禁用账号_通过AD域控平台统一批量管理公司电脑的桌面
- ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
- linux之cp强制复制文件
- Ubuntu进入pycharm创建的虚拟环境的方法(以及如果你安装了anaconda等其它修改了环境变量的东西该怎么进)
- matlab 矩阵数据类型,Matlab数据类型
- 优动漫PAINT拾色器功能介绍
- 计算ERA-5数据的相对湿度(RH)与饱和水汽压差(VPD)
- 题解 【中学高级本-网络流24题】餐巾计划
- 兄弟连Linux笔记
- Memcached damo
- gitter 卸载_最佳Gitter频道:数学
- 《带你学C带你飞》—— SE54位操作
- 【HDOJ】4210 Su-domino-ku
- IV-工具变量法:第一阶段系数符号确定时的小样本无偏估计
- mysql最近24小时数据_mysql中如何查询最近24小时、top n查询
- React 中同构(SSR)原理脉络梳理
- 网页中商业产品展示页制作方法探讨
- 2019年猪年海报PSD模板-第二部分
热门文章
- Python-bs4库,find_all 函数处理css样式问题
- 【办公软件】如何设置任务栏图标的显示与隐藏
- 管理模式和商业模式的区别
- (web)个人项目(挖宝网)
- 小程序突然报module is not defined_【第一季完】(字幕+讲解)小谢尔顿S1E22 Meemaw#39;s two boyfriends...
- 京东生鲜全品类爬虫--往期创作整理
- c#中正则表达式屏蔽一些特殊字符
- 【综合应用】基础PLS-SEM模型STATA实战
- Android拍摄照片、视频添加水印功能
- Altium高版本(19以上)Comment批量修改成Value或者MPN的方法