题目: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 —— 最大流+欧拉回路相关推荐

  1. poj 1637 Sightseeing tour——最大流+欧拉回路

    题目:http://poj.org/problem?id=1637 先给无向边随便定向,如果一个点的入度大于出度,就从源点向它连 ( 入度 - 出度 / 2 ) 容量的边,意为需要流出去这么多:流出去 ...

  2. POJ 1637 Sightseeing tour 混合图欧拉回路存在性判断

    没有想到网络流还能解决这一类问题,完全想不到@_@ 一开始把所有的无向边制定任意方向有当做有向边看,然后统计每个点的入度和出度.以前有向图的欧拉回路判定是每个点的入读都等于出度,这样可以保证可以回到起 ...

  3. POJ 1637 Sightseeing tour(最大流)

    POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...

  4. POJ - 1637 Sightseeing tour(混合图欧拉回路的求解--建图跑最大流)

    题目链接:https://vjudge.net/contest/399194#problem/B The city executive board in Lund wants to construct ...

  5. poj 1637 Sightseeing tour 混合欧拉图判定

    POJ - 1637点我点我:-) Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %ll ...

  6. poj 1637 Sightseeing tour 混合欧拉 最大流

    #include <cstdio> #include <vector> #include <queue> #include <cstring> usin ...

  7. poj 1637 Sightseeing tour

    http://poj.org/problem?id=1637 题意: 给出一张混合图,判断是否存在欧拉回路 原理: 1.存在欧拉回路的充要条件:所有点入度=出度 2.给无向边随便定向不会影响点的|出度 ...

  8. TZOJ 2099 Sightseeing tour(网络流判混合图欧拉回路)

    描述 The city executive board in Lund wants to construct a sightseeing tour by bus in Lund, so that to ...

  9. POJ 1637 混合图的欧拉回路 + Dinic

    题意 传送门 POJ 1637 题解 有向图存在欧拉回路的充要条件: 所有顶点入度等于出度,且图为连通图. 混合图存在欧拉回路的判断的基本思路: 混合图 G(V,E)G(V,E)G(V,E) 通过假设 ...

  10. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

最新文章

  1. 【 Notes 】Positioning system classification
  2. LeetCode 795. Number of Subarrays with Bounded Maximum
  3. mysql 时序 存储引擎_MySQL常见的三种存储引擎
  4. web 表单,脚本验证
  5. 普通图片在字模软件中的提取方法
  6. 项目管理学习总结(5)——产品开发过程中各角色职责说明和技能要求
  7. 在vivo面试 java_面试代码题(vivo)数位之积
  8. Windows 下 Git 的安装及如何与码云协作
  9. 并发修改异常ConcurrentModificationException详解
  10. 图——基本的图算法(四)关键路径
  11. android苹果模拟器哪个好,mac安卓模拟器哪个好用?为你推荐网易mumu模拟器
  12. 学硕计算机可考大数据博士吗,专硕考博比学硕考博难度更大吗?听听上岸的人怎么说...
  13. Cocos2d+protobuf仿JJ斗地主源码,win32和Android编译通过
  14. TIM ETR 配置
  15. mysql limit acs_Oracle Acs资深顾问罗敏 老罗技术核心感悟:牛! 11g的自动调优和
  16. python抽取某个时间段的数据_python 批量提取excel 指定时间段的数据
  17. 设计兼容不同的屏幕尺寸的Android界面
  18. Android7.0 Phone应用源码分析(二) phone来电流程分析
  19. 传输线理论之相速、相位等的概念
  20. phpmyadmin for linux,linux下phpmyadmin安装

热门文章

  1. 彻底解决四种路由器不能上网故障
  2. sqlserver 判断不为空_SQL server 学习
  3. Access to XMLHttpRequest at ‘url‘ from origin ‘null‘ has been blocked by CORS policy: Request header
  4. php mac windows,苹果电脑是windows系统吗
  5. 为什么使用php工厂模式,PHP 工厂模式使用方法
  6. 【渝粤教育】国家开放大学2018年春季 8665-21T护理伦理学 参考试题
  7. [渝粤教育] 西南科技大学 电力电子技术 在线考试复习资料
  8. pku 1151 (简单离散化求矩形覆盖总面积)
  9. 拥抱数据共享与代码开源的新时代
  10. python报错:Exception Value:can only concatenate str (not bytes) to str