题意:题目的翻译是有点问题的,其实是在一个无向图中找一条最大边权最小的欧拉回路。

首先二分最大边权,然后把超过的边删掉,这样这张图就变成了一个混合图(既有有向边也有无向边),我们借助网络流来判断是否存在欧拉回路。一个有向图存在欧拉回路的充要条件是每个点入度=出度,对于一条无向边,我们随便给一个方向,计算每个点的in[i]和out[i].对于in[i]>out[i]的点,由S向i连一条(in[i]-out[i])/2的边,否则由i向T连一条(out[i]-in[i])/2的边,对于前面的无向边,假设我们给的方向是由U到V,则由V连一条为1的边到U,跑最大流,如果可以满流则证明存在。

Tips:如果有点in和out都为0或者相减为奇数则必不存在,这种情况要特判

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1000+10;
const int INF=1000000000;
int in[maxn],out[maxn],dis[maxn],cur[maxn],vis[maxn],n,m,s,t,l=1,r=1000,ans=0,flag[maxn];
struct node
{int u,v,a,b;
}e[maxn*2];
struct edge
{int from,to,cap,flow;
};
vector<int> g[maxn];
vector<edge> edges;
void addedge(int from,int to,int cap)
{edges.push_back((edge){from,to,cap,0});edges.push_back((edge){to,from,0,0});int m1=edges.size();g[from].push_back(m1-2);g[to].push_back(m1-1);
}
bool bfs()
{memset(vis,0,sizeof(vis));queue<int> Q;Q.push(s);vis[s]=1;dis[s]=0;while(!Q.empty()){int x=Q.front();Q.pop();for(int i=0;i<g[x].size();i++){edge e=edges[g[x][i]];if(e.cap>e.flow&&!vis[e.to]){vis[e.to]=1;dis[e.to]=dis[x]+1;Q.push(e.to);}}}return vis[t];
}
int dfs(int x,int a)
{if(x==t||a==0) return a;int flow=0,f;for(int &i=cur[x];i<g[x].size();i++){edge &e=edges[g[x][i]];if(dis[e.to]==dis[x]+1&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0){flow+=f;e.flow+=f;edges[g[x][i]^1].flow-=f;a-=f;if(a==0) break;}}return flow;
}
int maxflow()
{int flow=0;while(bfs()){memset(cur,0,sizeof(cur));flow+=dfs(s,INF);}return flow;
}
bool check(int hm)
{edges.clear();s=0,t=n+1;for(int i=s;i<=t;i++) g[i].clear();for(int i=1;i<=n;i++) in[i]=out[i]=0;for(int i=1;i<=m;i++){if(e[i].a<=hm){out[e[i].u]++;in[e[i].v]++;}if(e[i].b<=hm) addedge(e[i].v,e[i].u,1);}int num=0;for(int i=1;i<=n;i++)if(in[i]>out[i]){addedge(s,i,(in[i]-out[i])/2);num+=(in[i]-out[i])/2;}else addedge(i,t,(out[i]-in[i])/2);for(int i=1;i<=n;i++) if((in[i]-out[i])&1||in[i]==0&&out[i]==0) return false;if(maxflow()==num) return true;else return false;
}
int main()
{freopen("data.in","r",stdin);freopen("data.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].a,&e[i].b);if(e[i].a>e[i].b){swap(e[i].a,e[i].b);swap(e[i].u,e[i].v);}}int l=1,r=1000;while(l<=r){int mid=(l+r)>>1;if(check(mid)){ans=mid;r=mid-1;}else l=mid+1;}if(ans) printf("%d\n",ans);else puts("NIE");return 0;
}

BZOJ 2095: [Poi2010]Bridges相关推荐

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

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

  2. BZOJ 2095: [Poi2010]Bridges 混合图欧拉回路

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

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

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

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

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

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

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

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

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

  7. bzoj2095 [Poi2010]Bridges

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

  8. BZOJ2095[Poi2010] Bridges

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

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

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

最新文章

  1. 学会 IDEA REST Client后,postman就可以丢掉了...
  2. oracle-Oracle试题
  3. ZOJ 1610 Count the Colors (线段树区间更新)
  4. 为iOS7重新设计你的App
  5. 华为手机锁屏上显示广告遭用户吐槽 官方回应:不是我们干的
  6. python制作u盘病毒_十行代码--用Python写一个USB病毒!
  7. php 内部 邮件,php电子邮件形式内部服务器错误
  8. SimpleFs文件系统初步四(Inode的创建过程)
  9. 均衡器算法_必须像算法一样对算法进行仔细调整。 怎么样? 算法均衡器
  10. PMP-全书知识重点图
  11. 国内知名的java商城系统排名
  12. pythonturtle艺术字_字体风格迁移,卷积神经网络打败艺术字,生成最美汉字
  13. matlab实现手绘风格(简笔画风格、漫画风格)的曲线绘图
  14. 【CodeForces 574B】Bear and Three Musketeers
  15. 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的
  16. layui怎么给下拉框赋值_layui给select下拉框赋值
  17. LoadLibrary下错误返回126错误码排查过程
  18. 【微信小程序WXS 模块】
  19. Vmware虚拟机下三种网络模式配置
  20. 国内的windows硬件检测软件算是很牛逼的吧!!!?

热门文章

  1. altium designer 出gerber文件时一个小问题的解决
  2. oracle的dump头文件用ue显示,关于Oracle dmp文件导入随笔
  3. 刚在在win8.1下装了ubuntu12.04
  4. 【双目视觉】 SGBM算法应用(Python版)
  5. Android 用Groovy实现扇贝阅读APP的自动阅读功能
  6. 为祖国庆生, 我们都经历了些什么?
  7. java 压缩oop_JVM优化之压缩普通对象指针(CompressedOops)
  8. Esp8266进阶之路16 esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。(附带固件)
  9. 用 canvas 操作图片像素
  10. 3月28日服务器维护,神武3月28日维护公告:新场景地图开放