poj 1637 Sightseeing tour——最大流+欧拉回路
题目: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——最大流+欧拉回路的更多相关文章
- poj 1637 Sightseeing tour —— 最大流+欧拉回路
题目:http://poj.org/problem?id=1637 建图很妙: 先给无向边随便定向,这样会有一些点的入度不等于出度: 如果入度和出度的差值不是偶数,也就是说这个点的总度数是奇数,那么一 ...
- POJ 1637 - Sightseeing tour - [最大流解决混合图欧拉回路]
嗯,这是我上一篇文章说的那本宝典的第二题,我只想说,真TM是本宝典……做的我又痛苦又激动……(我感觉ACM的日常尽在这张表情中了) 题目链接:http://poj.org/problem?id=163 ...
- POJ 1637 Sightseeing tour (混合图欧拉回路)
Sightseeing tour Description The city executive board in Lund wants to construct a sightseeing tou ...
- poj 1637 Sightseeing tour 混合图欧拉回路 最大流 建图
题目链接 题意 给定一个混合图,里面既有有向边也有无向边.问该图中是否存在一条路径,经过每条边恰好一次. 思路 从欧拉回路说起 首先回顾有向图欧拉回路的充要条件:\(\forall v\in G, d ...
- POJ 1637 Sightseeing tour ★混合图欧拉回路
[题目大意]混合图欧拉回路(1 <= N <= 200, 1 <= M <= 1000) [建模方法] 把该图的无向边随便定向,计算每个点的入度和出度.如果有某个点出入度之差为 ...
- POJ 1637 Sightseeing tour(最大流)
POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...
- 网络流(最大流) POJ 1637 Sightseeing tour
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8628 Accepted: 3636 ...
- POJ 1637 Sightseeing tour (混合图欧拉路判定)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6986 Accepted: 2901 ...
- POJ 1637 Sightseeing tour
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9276 Accepted: 3924 ...
随机推荐
- java7与java8的新特性
java7 新特性: 1. switch 里面的 case 条件可以使用字符串了. 2. 运用 List\tempList = new ArrayList<>(); 即泛型实例化类型自动判 ...
- DXVA2解码数据用texture纹理渲染
FFmpeg DXVA2解码得到的数据使用surface来承载的,surface限制很多,如果能用纹理来渲染的话,那我们就可以充分开发D3D,比如可以用坐标变换来实现电子放大的功能,还可以用坐标变换来 ...
- rsa加解密密钥生成命令
(1)生成原始RSA私钥文件 rsa_private_key.pem(原始私钥) openssl genrsa -out rsa_private_key.pem 2048 (2)将原始RSA私钥转换为 ...
- linux-Centos7安装mysql5.7.19
1.下载mysql 网址: https://dev.mysql.com/downloads/mysql/ 2.选择源码包,通用版点击下载 直接下载就可以了,不用登录 3.解压编译 先安装相关依赖包 y ...
- Attach to process 的问题
Attach to process找不到W3WP选项怎么办?刷新它的一个网页
- 九、dbms_ddl(提供了在PL/SQL块中执行DDL语句的方法)
1.概述 作用:提供了在PL/SQL块中执行DDL语句的方法,并且也提供了一些DDL的特殊管理方法. 2.包的组成 1).alter_compile说明:用于重新编译过程.函数和包语法:dbms_dd ...
- 前台cookie的操作
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- 利用有道翻译Api实现英文翻译功能
有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果. 通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...
- JSP的EL和JSTL解析
1. EL 简介EL 全名为Expression Language,所有EL都是以${ 为起始.以} 为结尾的.EL 语法很简单,它最大的特点就是使用上很方便. 接下来介绍EL 主要的语法结构: ${ ...
- CUDA Samples: Ray Tracking
以下CUDA sample是分别用C++和CUDA实现的生成光线跟踪图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第六章,CUDA各实现 ...