poj 1637 Sightseeing tour —— 最大流+欧拉回路
题目:http://poj.org/problem?id=1637
建图很妙;
先给无向边随便定向,这样会有一些点的入度不等于出度;
如果入度和出度的差值不是偶数,也就是说这个点的总度数是奇数,那么一定无解;
随便定向后,如果定向 x -> y,那么从 y 向 x 连一条容量为1的边,将来选了这条边,表示重新定向成 y -> x 了;
考虑如果选了这条边,那么 x 的出度-1,入度+1,变化量是2;
所以对于每个点,如果入度>出度,从源点向它连容量为 (入度-出度)/2 的边,因为刚才改向变化量为2,但容量是1,所以这里容量要 /2;
这样,为了流量守恒,这个点会流出去 (入度-出度)/2 的流量,对应原图,就是通过改向使这个点的入度=出度;
同理,如果入度<出度,从它向汇点连容量为 (出度-入度)/2 的边;
然后看是否满流即可。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int const xn=205,xm=3005,inf=0x3f3f3f3f; int n,m,hd[xn],ct=1,to[xm],nxt[xm],dis[xn],cur[xn],c[xm],ind[xn],cd[xn]; queue<int>q; int rd() {int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return f?ret:-ret; } void add(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct; c[ct]=z;} int abss(int x){return x>0?x:-x;} bool bfs() {while(q.size())q.pop();memset(dis,0,sizeof dis);dis[0]=1; q.push(0);while(q.size()){int x=q.front(); q.pop();for(int i=hd[x],u;i;i=nxt[i])if(!dis[u=to[i]]&&c[i])dis[u]=dis[x]+1,q.push(u);}return dis[n+1]; } int dfs(int x,int fl) {if(x==n+1)return fl;int ret=0;for(int &i=cur[x],u;i;i=nxt[i]){if(dis[u=to[i]]!=dis[x]+1||!c[i])continue;int tmp=dfs(u,min(fl-ret,c[i]));if(!tmp)dis[u]=0;c[i]-=tmp; c[i^1]+=tmp;ret+=tmp; if(ret==fl)break;}return ret; } int main() {int T=rd();while(T--){ct=1; memset(hd,0,sizeof hd);memset(ind,0,sizeof ind); memset(cd,0,sizeof cd);n=rd(); m=rd();for(int i=1,x,y,z;i<=m;i++){x=rd(); y=rd(); z=rd();cd[x]++; ind[y]++;if(!z)add(y,x,1),add(x,y,0);}bool fl=0; int goal=0;for(int i=1;i<=n;i++){if(abss(ind[i]-cd[i])%2){fl=1; break;}if(ind[i]>cd[i])add(0,i,(ind[i]-cd[i])/2),add(i,0,0),goal+=(ind[i]-cd[i])/2;else if(ind[i]<cd[i])add(i,n+1,(cd[i]-ind[i])/2),add(n+1,i,0);}if(fl){puts("impossible"); continue;}int ans=0;while(bfs()){memcpy(cur,hd,sizeof hd);ans+=dfs(0,inf);}if(ans==goal)puts("possible");else puts("impossible");}return 0; }
转载于:https://www.cnblogs.com/Zinn/p/10117594.html
poj 1637 Sightseeing tour —— 最大流+欧拉回路相关推荐
- poj 1637 Sightseeing tour——最大流+欧拉回路
题目:http://poj.org/problem?id=1637 先给无向边随便定向,如果一个点的入度大于出度,就从源点向它连 ( 入度 - 出度 / 2 ) 容量的边,意为需要流出去这么多:流出去 ...
- POJ 1637 Sightseeing tour 混合图欧拉回路存在性判断
没有想到网络流还能解决这一类问题,完全想不到@_@ 一开始把所有的无向边制定任意方向有当做有向边看,然后统计每个点的入度和出度.以前有向图的欧拉回路判定是每个点的入读都等于出度,这样可以保证可以回到起 ...
- POJ 1637 Sightseeing tour(最大流)
POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...
- POJ - 1637 Sightseeing tour(混合图欧拉回路的求解--建图跑最大流)
题目链接:https://vjudge.net/contest/399194#problem/B The city executive board in Lund wants to construct ...
- poj 1637 Sightseeing tour 混合欧拉图判定
POJ - 1637点我点我:-) Sightseeing tour Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %ll ...
- poj 1637 Sightseeing tour 混合欧拉 最大流
#include <cstdio> #include <vector> #include <queue> #include <cstring> usin ...
- poj 1637 Sightseeing tour
http://poj.org/problem?id=1637 题意: 给出一张混合图,判断是否存在欧拉回路 原理: 1.存在欧拉回路的充要条件:所有点入度=出度 2.给无向边随便定向不会影响点的|出度 ...
- TZOJ 2099 Sightseeing tour(网络流判混合图欧拉回路)
描述 The city executive board in Lund wants to construct a sightseeing tour by bus in Lund, so that to ...
- POJ 1637 混合图的欧拉回路 + Dinic
题意 传送门 POJ 1637 题解 有向图存在欧拉回路的充要条件: 所有顶点入度等于出度,且图为连通图. 混合图存在欧拉回路的判断的基本思路: 混合图 G(V,E)G(V,E)G(V,E) 通过假设 ...
- 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...
最新文章
- 【 Notes 】Positioning system classification
- LeetCode 795. Number of Subarrays with Bounded Maximum
- mysql 时序 存储引擎_MySQL常见的三种存储引擎
- web 表单,脚本验证
- 普通图片在字模软件中的提取方法
- 项目管理学习总结(5)——产品开发过程中各角色职责说明和技能要求
- 在vivo面试 java_面试代码题(vivo)数位之积
- Windows 下 Git 的安装及如何与码云协作
- 并发修改异常ConcurrentModificationException详解
- 图——基本的图算法(四)关键路径
- android苹果模拟器哪个好,mac安卓模拟器哪个好用?为你推荐网易mumu模拟器
- 学硕计算机可考大数据博士吗,专硕考博比学硕考博难度更大吗?听听上岸的人怎么说...
- Cocos2d+protobuf仿JJ斗地主源码,win32和Android编译通过
- TIM ETR 配置
- mysql limit acs_Oracle Acs资深顾问罗敏 老罗技术核心感悟:牛! 11g的自动调优和
- python抽取某个时间段的数据_python 批量提取excel 指定时间段的数据
- 设计兼容不同的屏幕尺寸的Android界面
- Android7.0 Phone应用源码分析(二) phone来电流程分析
- 传输线理论之相速、相位等的概念
- phpmyadmin for linux,linux下phpmyadmin安装
热门文章
- 彻底解决四种路由器不能上网故障
- sqlserver 判断不为空_SQL server 学习
- Access to XMLHttpRequest at ‘url‘ from origin ‘null‘ has been blocked by CORS policy: Request header
- php mac windows,苹果电脑是windows系统吗
- 为什么使用php工厂模式,PHP 工厂模式使用方法
- 【渝粤教育】国家开放大学2018年春季 8665-21T护理伦理学 参考试题
- [渝粤教育] 西南科技大学 电力电子技术 在线考试复习资料
- pku 1151 (简单离散化求矩形覆盖总面积)
- 拥抱数据共享与代码开源的新时代
- python报错:Exception Value:can only concatenate str (not bytes) to str