题目传送门

分析:

首先就是二分

然后。。。

混合图欧拉回路是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的更多相关文章

  1. bzoj 2095: [Poi2010]Bridges [混合图欧拉回路]

    2095: [Poi2010]Bridges 二分答案,混合图欧拉路判定 一开始想了一个上下界网络流模型,然后发现不用上下界网络流也可以 对于无向边,强制从\(u \rightarrow v\),计算 ...

  2. BZOJ 2095: [Poi2010]Bridges

    2095: [Poi2010]Bridges Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 869  Solved: 299[Submit][Stat ...

  3. bzoj 2095 [Poi2010]Bridges 判断欧拉维护,最大流+二分

    [Poi2010]Bridges Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1448  Solved: 510[Submit][Status][D ...

  4. BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)

    洛谷上有这题,但是输出方案缺SPJ..(而且我也懒得输出方案了) 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2095 题解: 首先判 ...

  5. bzoj 2095: [Poi2010]Bridges(二分法+混合图的欧拉回路)

    [题意] 给定n点m边的无向图,对于边u,v,从u到v边权为c,从v到u的边权为d,问能够经过每条边一次且仅一次,且最大权值最小的欧拉回路. [思路] 二分答案mid,然后切断权值大于mid的边,原图 ...

  6. BZOJ.2095.[POI2010]Bridges(最大流ISAP 二分 欧拉回路)

    题目链接 最小化最大的一条边,二分答案.然后就变成了给一张无向图定向使其为欧拉回路 二分答案后对于一个位置的两条边可能都保留,即双向边,需要给它定向:可能只保留小的一条,即单向边,不需考虑 如何给它定 ...

  7. 【刷题】BZOJ 2095 [Poi2010]Bridges

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

  8. BZOJ 2095 [Poi2010]Bridges (二分+最大流判断混合图的欧拉回路)

    题面 nnn个点,mmm条双向边(正向与反向权值不同),求经过最大边权最小的欧拉回路的权值 分析 见 commonc大佬博客 精髓就是通过最大流调整无向边的方向使得所有点的入度等于出度 CODE #i ...

  9. [原博客] POI系列(5)

    正规.严谨.精妙. -POI BZOJ 2213 : [Poi2011]Difference 如果我们每次枚举两个字母最大最小情况时,很容易想到写出代码里注释的样子.这样是26*26*n的,我们发现枚 ...

随机推荐

  1. 新书《iOS编程(第6版)》抢鲜试读

    我最近翻译了Big Nerd Ranch的<iOS编程(第6版)>.我用了大半年时间,尽可能做到通顺易懂.不足之处请大家多多指正.感谢辛苦审校的丁道骏同学. 这本书得过Jolt大奖,原书在 ...

  2. kube-batch 解析

    kube-batch https://github.com/kubernetes-sigs/kube-batch 一. 做什么的? 官方介绍: A batch scheduler of kuberne ...

  3. Python6_模块、包、import、from import的解释

    先说一下模块和包是什么? 模块(module):简单来说一个模块(module)就是一个py文件.在python中是这么约定. 模块里面有函数.类,就是一组代码的集合.   模块显然要有一个名字,这个 ...

  4. Python之time模块和datatime模块

    import time time.sleep(5) #休眠 time.time() #返回系统时间戳 utc时间秒数 time.ctime() #返回字符串时间格式,也可以传入参数转换为字符串时间ti ...

  5. element-ui table 的翻页记忆选中

    公司中台项目刚开始开发,用了vue+element,需要许多前置调研,table的翻译记忆选中就是其中之一. template: <el-table :ref="tableRef&qu ...

  6. $POJ1015\ Jury\ Compromise\ Dp$/背包

    洛谷传送门 $Sol$ 这是一道具有多个“体积维度”的$0/1$背包问题. 把$N$个候选人看做$N$个物品,那么每个物品有如下三种体积: 1.“人数”,每个候选人的“人数”都是$1$,最终要填满容积 ...

  7. 用TensorFlow做图像识别(python)

    一.TensorFlow简介 TensorFlow是由谷歌开发的一套机器学习的工具,使用方法很简单,只需要输入训练数据位置,设定参数和优化方法等,TensorFlow就可以将优化结果显示出来,节省了很 ...

  8. 【转】python及其工具包安装基本流程

    昨天晚上在家里的旧电脑上安装了<利用python进行数据分析>的部分环境,遇到若干问题,在此予以记录. 部分细节转:http://blog.csdn.net/huanbia/article ...

  9. vmware workstation12在安装VMware tools时出现问题:A previous installation of VMware Tools has been detected 解决

    win10安装的vmware workstation12在安装VMware tools时出现问题: root@lc:/root/vmware-tools-distrib# ./vmware-insta ...

  10. PS/2的相关知识

    PS/2接口 很多微机上采用PS/2口来连接鼠标和键盘.PS/2接口与传统的键盘接口除了在接口外型.引脚有不同外,在数据传送格式上是相同的.现在很多主板用PS/2接口插座连接键盘,传统接口的键盘可以通 ...