http://www.cnblogs.com/looker_acm/archive/2010/08/15/1799919.html

/*
** 混合图欧拉回路
** 只记录各定点的出度与入度之差,有向边无用丢弃,将无向边定向,在网络中建立流量为1的边
** 另新建s和t。对于入 > 出的点u,连接边(u, t)、容量为x,对于出 > 入的点v,连接边(s, v),
** 容量为x(注意对不同的点x不同)。之后,察看是否有满流的分配,如果是满流则存在,否则不存在
*/ #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std;
const int maxn = 300;
const int maxm = maxn*10;
struct node{
int v,next,flow;
}edge[maxm];
int head[maxn],dis[maxn],deg[maxn];
int id,source,sink;
void add_edge(int u,int v,int flow){
edge[id].v = v;edge[id].flow = flow;edge[id].next = head[u];head[u] = id++;
edge[id].v = u;edge[id].flow = 0 ;edge[id].next = head[v];head[v] = id++;
}
bool spfa(){
memset(dis,-1,sizeof(dis));
dis[source] = 0;
queue<int>que;
que.push(source);
while(!que.empty()){
int u = que.front();
que.pop();
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if( edge[id].flow > 0 && dis[v] == -1){
dis[v] = dis[u] + 1;
que.push(v);
}
}
}
return dis[sink] != -1;
} int dinic(int u,int flow){
if( u == sink)return flow;
int tmp = flow;
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if( edge[id].flow > 0 && dis[v] == dis[u] + 1){
int tt = dinic(v,min(edge[id].flow ,tmp));
tmp -= tt;
edge[id].flow -= tt;
edge[id^1].flow += tt;
if( tmp == 0)return flow;
}
}
return flow - tmp;
}
int get_max(){
int max_flow = 0;
while( spfa())
max_flow += dinic(source,100000);
return max_flow;
}
int main(){
int t,n,m;
int u,v,d;
scanf("%d",&t);
while( t-- ){
scanf("%d%d",&n,&m);
for(int i = 0; i <= n+1; i++)
deg[i] = 0,head[i] = -1;
id = source = 0;sink = n+1;
while( m-- ){
scanf("%d%d%d",&u,&v,&d);
if( u == v)continue;
deg[u]++,deg[v]--;
if( d == 0)add_edge(u,v,1);
}
bool flg = false;
int ans = 0;
for(int i = 1;i <= n; i++){
if( deg[i]%2 ){flg = true;break;}
deg[i] /= 2;
if( deg[i] > 0){
ans += deg[i];
add_edge(source,i,deg[i]);
}
else
add_edge(i,sink,-deg[i]);
}
if( flg || ans != get_max())puts("impossible");
else puts("possible"); }
return 0;
}

混合图欧拉回路POJ1637Sightseeing tour的更多相关文章

  1. poj1637Sightseeing tour(混合图欧拉回路)

    题目请戳这里 题目大意:求混合图欧拉回路. 题目分析:最大流.竟然用网络流求混合图的欧拉回路,涨姿势了啊啊.. 其实仔细一想也是那么回事.欧拉回路是遍历所有边一次又回到起点的回路.双向图只要每个点度数 ...

  2. POJ 1637 - Sightseeing tour - [最大流解决混合图欧拉回路]

    嗯,这是我上一篇文章说的那本宝典的第二题,我只想说,真TM是本宝典……做的我又痛苦又激动……(我感觉ACM的日常尽在这张表情中了) 题目链接:http://poj.org/problem?id=163 ...

  3. Sightseeing tour 【混合图欧拉回路】

    题目链接:http://poj.org/problem?id=1637 Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total ...

  4. POJ 1637 Sightseeing tour ★混合图欧拉回路

    [题目大意]混合图欧拉回路(1 <= N <= 200, 1 <= M <= 1000) [建模方法] 把该图的无向边随便定向,计算每个点的入度和出度.如果有某个点出入度之差为 ...

  5. poj1637 Sightseeing tour(混合图欧拉回路)

    题目链接 题意 给出一个混合图(有无向边,也有有向边),问能否通过确定无向边的方向,使得该图形成欧拉回路. 思路 这是一道混合图欧拉回路的模板题. 一张图要满足有欧拉回路,必须满足每个点的度数为偶数. ...

  6. POJ 1637 Sightseeing tour(混合图欧拉回路+最大流)

    http://poj.org/problem?id=1637 题意:给出n个点和m条边,这些边有些是单向边,有些是双向边,判断是否能构成欧拉回路. 思路: 构成有向图欧拉回路的要求是入度=出度,无向图 ...

  7. [POJ1637]Sightseeing tour:混合图欧拉回路

    分析 混合图欧拉回路问题. 一个有向图有欧拉回路当且仅当图连通并且对于每个点,入度\(=\)出度. 入度和出度相等可以联想到(我也不知道是怎么联想到的)网络流除了源汇点均满足入流\(=\)出流.于是可 ...

  8. 【BZOJ-2095】Bridge 最大流 + 混合图欧拉回路 + 二分

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

  9. POJ 1637 混合图欧拉回路

    先来复习一下混合图欧拉回路:给定一张含有单向边和双向边的图,使得每一点的入度出度相同. 首先对于有向边来说,它能贡献的入度出度是确定的,我们不予考虑.对于无向图,它可以通过改变方向来改变两端点的出入度 ...

随机推荐

  1. ES6--变量

    声明变量 首先我们来回顾一下 es6 之前声明变量的方法:通常情况下,在 JavaScript 中,我们只有一种声明变量的关键字--var,我们使用 var 声明变量,使用 = 给变量赋值.在es6中 ...

  2. Pow共识算法

    谈到哈希算法,每个程序员都不陌生,但是谈到比特币共识算法PoW,如果没有接触过的技术人员可能觉得应该会很复杂,毕竟全球的比特币节点数量如此庞大,达成共识的算法应该不会很简单.但其实如果你已掌握哈希算法 ...

  3. 北大ACM试题分类+部分解题报告链接

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  4. Jmeter 接口测试参数处理

    问题: 一.签名参数sign算法由文字描述,算法需自己编写 二. 参数param_json为变化的json串(json串内订单号唯一) 解决: 一. 签名sign: 1. 手动拼接后在https:// ...

  5. 利用DoHome APP和音箱控制小车的实验参考步骤

    准备材料: Arduino Uno 一块 Arduino 扩展板        购买链接 DT-06模块一个       购买链接 安卓手机一个 小度音箱一个 小车一个 杜邦线若干 1.DT-06固件 ...

  6. Java回收机制概述

    Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区. 垃圾回收机制的 ...

  7. 洛谷 P3203 [HNOI2010]弹飞绵羊

    题意简述 有n个点,第i个点有一个ki,表示到达i这个点后可以到i + ki这个点 支持修改ki和询问一点走几次能走出所有点两个操作 题解思路 分块, 对于每个点,维护它走到下一块所经过的点数,它走到 ...

  8. Python模拟登录淘宝

    最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章!看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.sel ...

  9. Joda Time使用小结

    一.Joda Time基础操作 1. 构造指定时间 // 明确给出年月日时分秒,同时还可以指定毫秒 DateTime dateTime = new DateTime(2017,9,14,20,30,0 ...

  10. CSS3的滤镜filter属性

    css3的滤镜filter属性,可以对网页中的图片进行类似Photoshop图片处理的效果,例如背景的毛玻璃效果.老照片(黑白照片).火焰效果等. 一.blur(px)高斯模糊 二.brightnes ...