BZOJ 2095 Bridges
题目传送门
分析:
首先就是二分
然后。。。
混合图欧拉回路是sm。。。
看了题解Orz
首先要回到原来的点的话,那么每个点入度和出度要相等。。。
这。。和网络流进入点之后就出去不是一样的吗。。
又由于有的边可以反向
反向后又会改变两个点+-2的流量
于是考虑上下界网络流
每条单向边容量设为1
每条双向边随便定向,连(-1,1)的边
wsm会出现负数?因为-1可以代表反向流
但是貌似并不影响上下界网络流诶。。。
哦摩西罗伊2333
直接跑就好了
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm> #define maxn 3005
#define maxm 500005
#define INF 0x3f3f3f3f using namespace std; inline int getint()
{
int num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} int n,m,S,T;
int fir[maxn],nxt[maxm],to[maxm],cap[maxm],cnt;
int h[maxn],tp[maxn];
struct node{
int a,b,c,d;
}E[maxm];
int f[maxn]; inline void newnode(int u,int v,int w)
{to[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt,cap[cnt]=w;}
inline void insert(int u,int v,int w)
{newnode(u,v,w),newnode(v,u,);} inline bool bfs()
{
memset(h,-,sizeof h);
queue<int>Q;h[S]=,Q.push(S);
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=fir[u];i;i=nxt[i])
if(cap[i]&&!~h[to[i]])h[to[i]]=h[u]+,Q.push(to[i]);
}
return ~h[T];
} inline int dfs(int u,int flow)
{
if(u==T)return flow;
int used=;
for(int i=tp[u];i;i=nxt[i])
{
tp[u]=i;
if(cap[i]&&h[to[i]]==h[u]+)
{
int w=flow-used;
w=dfs(to[i],min(cap[i],w));
cap[i]-=w,cap[i^]+=w,used+=w;
if(used==flow)return flow;
}
}
if(!used)h[u]=-;
return used;
} inline int dinic()
{
int num=;
while(bfs())memcpy(tp,fir,sizeof fir),num+=dfs(S,INF);
return num;
} inline bool check(int num)
{
memset(fir,,sizeof fir);cnt=;
memset(f,,sizeof f);
for(int i=;i<=m;i++)
{
if(E[i].c<=num&&E[i].d<=num)f[E[i].a]--,f[E[i].b]++,insert(E[i].b,E[i].a,);
else if(E[i].c<=num)f[E[i].a]--,f[E[i].b]++;
else if(E[i].d<=num)f[E[i].b]--,f[E[i].a]++;
else return ;
}
int sum=;
for(int i=;i<=n;i++)
{
if(f[i]&)return ;
if(f[i]>)insert(S,i,f[i]),sum+=f[i];
else insert(i,T,-f[i]);
}
return sum==dinic();
} int main()
{
n=getint(),m=getint();S=n+,T=S+;
for(int i=;i<=m;i++)E[i].a=getint(),E[i].b=getint(),E[i].c=getint(),E[i].d=getint();
int l=,r=INF;
while(l<r)
{
int mid=(l+r)>>;
if(check(mid))r=mid;
else l=mid+;
}
if(l==INF)printf("NIE\n");
else printf("%d\n",l);
}

BZOJ 2095 Bridges的更多相关文章
- bzoj 2095: [Poi2010]Bridges [混合图欧拉回路]
2095: [Poi2010]Bridges 二分答案,混合图欧拉路判定 一开始想了一个上下界网络流模型,然后发现不用上下界网络流也可以 对于无向边,强制从\(u \rightarrow v\),计算 ...
- BZOJ 2095: [Poi2010]Bridges
2095: [Poi2010]Bridges Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 869 Solved: 299[Submit][Stat ...
- bzoj 2095 [Poi2010]Bridges 判断欧拉维护,最大流+二分
[Poi2010]Bridges Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1448 Solved: 510[Submit][Status][D ...
- BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)
洛谷上有这题,但是输出方案缺SPJ..(而且我也懒得输出方案了) 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2095 题解: 首先判 ...
- bzoj 2095: [Poi2010]Bridges(二分法+混合图的欧拉回路)
[题意] 给定n点m边的无向图,对于边u,v,从u到v边权为c,从v到u的边权为d,问能够经过每条边一次且仅一次,且最大权值最小的欧拉回路. [思路] 二分答案mid,然后切断权值大于mid的边,原图 ...
- BZOJ.2095.[POI2010]Bridges(最大流ISAP 二分 欧拉回路)
题目链接 最小化最大的一条边,二分答案.然后就变成了给一张无向图定向使其为欧拉回路 二分答案后对于一个位置的两条边可能都保留,即双向边,需要给它定向:可能只保留小的一条,即单向边,不需考虑 如何给它定 ...
- 【刷题】BZOJ 2095 [Poi2010]Bridges
Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车从小岛1 ...
- BZOJ 2095 [Poi2010]Bridges (二分+最大流判断混合图的欧拉回路)
题面 nnn个点,mmm条双向边(正向与反向权值不同),求经过最大边权最小的欧拉回路的权值 分析 见 commonc大佬博客 精髓就是通过最大流调整无向边的方向使得所有点的入度等于出度 CODE #i ...
- [原博客] POI系列(5)
正规.严谨.精妙. -POI BZOJ 2213 : [Poi2011]Difference 如果我们每次枚举两个字母最大最小情况时,很容易想到写出代码里注释的样子.这样是26*26*n的,我们发现枚 ...
随机推荐
- 洛谷——P1012拼数字符串操作(拼接排序)
#include<bits/stdc++.h> using namespace std; bool cmp(const string &a,const string &b) ...
- Oracle Net Manager 的使用方法(监听的配置方法)
一,在服务端配置oracle端口 win+R 输入netca 弹出如下窗口后 选择监听程序配置,点击下一步 二.配置端口后使用Telnet工具调试端口是否联通 在命令行输入telnet 服务器ip ...
- 学习Java第二周
这是学习java的第二周,又这样不知不觉的结束了 上周想要学习的这一周也都做到了,可是觉得进度有些慢了,学习了: 1. 接口和抽象类: 2. 集合与数组: 3. 方法的定义: 4. 递归算法: 5.对 ...
- 【原创】(十四)Linux内存管理之page fault处理
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Win7安装和配置Apache
一.版本介绍 首先,我们需要下载Apache2.4服务器:http://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC14 关于现在那个版 ...
- 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时
[时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...
- 快速部署 Spring PetClinic 到函数计算平台
简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- mysql主从之配置基本环境
实验环境 master 192.168.132.121 主库 slave 192.168.132.122 从库 一 mysql的使用介绍 1.1 mysql单台服务器特点 缺点 单台服务器如 ...
- java编程思想札记一
1. 访问权限中尤其注意protected,它包含了包访问权限,只要是同一个包里的,就能访问到protected成员. 2. 后期绑定:被调用代码直到执行时才能确定,编译阶段只保证调用方法存在和类 ...
- linux下卸载旧版本cmake安装新版本cmake
1.看当前cmake版本 cmake --version 2.卸载旧版本下的cmake apt-get autoremove cmake 3.安装新版面cmake http://www.cnblogs ...