题目:http://poj.org/problem?id=1637

先给无向边随便定向,如果一个点的入度大于出度,就从源点向它连 ( 入度 - 出度 / 2 ) 容量的边,意为需要流出去这么多;流出去1表示改了一条边的方向,会使自己出度-1、入度+1,所以容量要/2;出度大于入度的点类似地连向汇点;无向边按给它定的方向的反方向连上容量为1的边;最后看看能否满流即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=,M=,INF=N*M;
int n,m,deg[N],hd[N],xnt,cur[N],sm[N],gn[N],gt[N],dfn[N];
struct Ed{
int to,nxt,cap;
Ed(int a=,int b=,int c=):to(a),nxt(b),cap(c) {}
}ed[M+N<<];
queue<int> q;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
void init()
{
xnt=;memset(deg,,sizeof deg);//xnt=1!!!
memset(sm,,sizeof sm);memset(hd,,sizeof hd);
memset(gn,,sizeof gn);memset(gt,,sizeof gt);
}
void add(int x,int y,int z)
{
ed[++xnt]=Ed(y,hd[x],z);hd[x]=xnt;
ed[++xnt]=Ed(x,hd[y],);hd[y]=xnt;
}
bool bfs()
{
memset(dfn,,sizeof dfn);
dfn[]=;q.push();
while(q.size())
{
int k=q.front();q.pop();
for(int i=hd[k],v;i;i=ed[i].nxt)
if(!dfn[v=ed[i].to]&&ed[i].cap)
dfn[v]=dfn[k]+,q.push(v);
}
return dfn[n+];
}
int dinic(int cr,int flow)
{
if(cr==n+)return flow;//
int use=;
for(int& i=cur[cr],v;i;i=ed[i].nxt)
if(dfn[v=ed[i].to]==dfn[cr]+&&ed[i].cap)
{
int tmp=dinic(v,min(flow-use,ed[i].cap));
if(!tmp)dfn[v]=n+;
use+=tmp;ed[i].cap-=tmp;ed[i^].cap+=tmp;
if(use==flow)return use;
}
return use;
}
int main()
{
int T=rdn();
while(T--)
{
n=rdn();m=rdn();init();
for(int i=,u,v,fx;i<=m;i++)
{
u=rdn();v=rdn();fx=rdn();
deg[u]++;deg[v]++;sm[v]++;sm[u]--;//in - out
if(!fx)add(v,u,);
else gn[v]++,gt[u]++;
}
bool flag=;int val=;
for(int i=;i<=n;i++)
{
if((deg[i]&)||gn[i]>(deg[i]>>)||gt[i]>(deg[i]>>))
{flag=;break;}
if(sm[i]>)add(,i,sm[i]>>),val+=sm[i]>>;
else if(sm[i]<)add(i,n+,-sm[i]>>);
}
if(flag){puts("impossible");continue;}
int mxflow=;
while(bfs())
{memcpy(cur,hd,sizeof hd);mxflow+=dinic(,INF);}//fr:0 !!!
if(mxflow==val)puts("possible");
else puts("impossible");
}
return ;
}

poj 1637 Sightseeing tour——最大流+欧拉回路的更多相关文章

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

    题目:http://poj.org/problem?id=1637 建图很妙: 先给无向边随便定向,这样会有一些点的入度不等于出度: 如果入度和出度的差值不是偶数,也就是说这个点的总度数是奇数,那么一 ...

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

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

  3. POJ 1637 Sightseeing tour (混合图欧拉回路)

    Sightseeing tour   Description The city executive board in Lund wants to construct a sightseeing tou ...

  4. poj 1637 Sightseeing tour 混合图欧拉回路 最大流 建图

    题目链接 题意 给定一个混合图,里面既有有向边也有无向边.问该图中是否存在一条路径,经过每条边恰好一次. 思路 从欧拉回路说起 首先回顾有向图欧拉回路的充要条件:\(\forall v\in G, d ...

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

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

  6. POJ 1637 Sightseeing tour(最大流)

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

  7. 网络流(最大流) POJ 1637 Sightseeing tour

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8628   Accepted: 3636 ...

  8. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  9. POJ 1637 Sightseeing tour

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9276   Accepted: 3924 ...

随机推荐

  1. 各种数据库对应的jar包、驱动类名和URL格式

    1.1.       各种数据库对应的jar包 具体如下: 数据库类型 对应的Jar文件 Oracle 8i classes12.zip 或 ojdbc14.jar Sybase jconn2.jar ...

  2. linux-Centos7安装nginx

    首先配置linux环境,我这里是刚刚装好linux,所以一次性安装了一系列我需要到的环境: yum install pcre pcre-devel zlib zlib-devel openssl op ...

  3. 028——VUE中事件修饰符once

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. golang版并发爬虫

    准备爬取内涵段子的几则笑话,先查看网址:http://www.budejie.com/text/ 简单分析后发现每页的url呈加1趋势 第一页: http://www.budejie.com/text ...

  5. New Concept English three(15)

    31w/m 43 Children always appreciate small gifts of money. Father, of course, provides a regular supp ...

  6. GreenPlum的Primary和Mirro切换恢复

    gp节点出现了acting as primary change tracking错误,判断是节点primary和mirror发生了切换 1.没有配置gp的日志,无法获取为什么切换了,待会儿看看默认日志 ...

  7. Flexible 弹性盒子模型之CSS order 属性

    实例 设置弹性盒对象元素的顺序: div#myRedDIV {order:2;} div#myBlueDIV {order:4;} div#myGreenDIV {order:3;} div#myPi ...

  8. [Linux] jq:命令行JSON处理工具

    jq命令帮助我们很方便地在终端查看和处理json文件 jq命令的帮助信息: abby@abby:bgs$ jq -h jq - commandline JSON processor [version ...

  9. gdi+ 中发生一般性错误 wpf解决方法

    错误背景:原来在winform程序中写了一个窗口,在wpf应用程序中调用显示了这个窗口,有个头像功能,加载本地的一个图片文件,加载前进行了各种逻辑判断,效果如下: 而加载的关键代码如下面: pictu ...

  10. C#中PadLeft和PadRight小知识点

    当我们显示字符串数据时,有时候我们需要考虑数据的排列美观. 比如一些人名和一些编号,我们想让他们整齐对齐显示等. C# String类提供了2种操作方法: String.PadLeft(int tot ...