SPOJ IM_Intergalactic Map
判断能否从一个点同时找出两条不相交的路径到另外两个点。
保证路径不相交,那么需要拆点。然后?好像就没什么了,直接最大流即可。
不过,,,不需要求出所有的最大流,只要跑两次EK看看能否增广两次就行了。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#define maxn 2001000
#define maxm 5002000
using namespace std; int L[maxn],R[maxn],Li[maxn],Ri[maxn];
int to[maxm],next[maxm],c[maxm],first[maxn],edge,node;
int from[maxn],tag[maxn],TAG=;
int Q[maxm],bot,top;
int n,m,s,t,T; int addnode()
{
first[++node]=-;
return node;
} void addedge(int U,int V)
{
edge++;
to[edge]=V,c[edge]=,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=,next[edge]=first[V],first[V]=edge;
} void _input()
{
int U,V;
node=,edge=-;
scanf("%d%d",&n,&m);
while (m--)
{
scanf("%d%d",&U,&V);
if (Li[U]!=TAG) Li[U]=TAG,L[U]=addnode(),R[U]=addnode(),addedge(L[U],R[U]);
if (Li[V]!=TAG) Li[V]=TAG,L[V]=addnode(),R[V]=addnode(),addedge(L[V],R[V]);
addedge(R[U],L[V]),addedge(R[V],L[U]);
}
t=addnode();
if (Li[]==TAG) s=R[];
else s=addnode();
if (Li[]==TAG) addedge(R[],t);
if (Li[]==TAG) addedge(R[],t);
} bool EK()
{
Q[bot=top=]=s,tag[s]=++TAG,from[s]=-;
while (bot<=top)
{
int cur=Q[bot++];
for (int i=first[cur]; i!=-; i=next[i])
if (c[i]> && tag[to[i]]!=TAG)
{
Q[++top]=to[i],from[to[i]]=i,tag[to[i]]=TAG;
if (to[i]==t)
{
for (int k=t; from[k]!=-; k=to[from[k]^])
c[from[k]]--,c[from[k]^]++;
return true;
}
}
}
return false;
} int main()
{
scanf("%d",&T);
while (T--)
{
_input();
if (EK() && EK()) puts("YES");
else puts("NO");
}
return ;
}
SPOJ IM_Intergalactic Map的更多相关文章
- SPOJ IM - Intergalactic Map - [拆点最大流]
题目链接:http://www.spoj.com/problems/IM/en/ Time limit:491 ms Memory limit:1572864 kB Code length Limit ...
- SPOJ 962 Intergalactic Map (网络最大流)
http://www.spoj.com/problems/IM/ 962. Intergalactic Map Problem code: IM Jedi knights, Qui-Gon Jinn ...
- SPOJ 962 Intergalactic Map
Intergalactic Map Time Limit: 6000ms Memory Limit: 262144KB This problem will be judged on SPOJ. Ori ...
- SPOJ ADAFIELD Ada and Field(STL的使用:set,multiset,map的迭代器)题解
题意:n*m的方格,“0 x”表示x轴在x位置切一刀,“0 y”表示y轴在y位置切一刀,每次操作后输出当前面积最大矩形. 思路:用set分别储存x轴y轴分割的点,用multiset(可重复)储存x轴y ...
- SPOJ - ADAFIELD ,Set+map,STL不会超时!
ADAFIELD - Ada and Field 这个题,如果用一个字来形容的话:-----------------------------------------------嗯! 题意:n*m的空白 ...
- Intergalactic Map SPOJ - IM
传送门 我觉得我写得已经和题解一模一样了,不知道为什么就是过不了..懒得拍了,反正不是很难,不太想浪费时间. 1~2~3的一条路径相当于从2~1的一条路径+2~3的一条路径,点不能重复经过,于是拆点. ...
- SPOJ 962 Intergalactic Map (从A到B再到C的路线)
[题意]在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= 5 ...
- SPOJ 0962 Intergalactic Map
题目大意:在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= ...
- spoj 962 IM - Intergalactic Map【最大流】
因为是无向图,所以从1到2再到3等于从2到1和3.用拆点来限制流量(i,i+n,1),然后连接(s,2+n,1),(1,t,1),(3,t,1),对于原图中的边连接(x+n,y,1)(y+n,x,1) ...
随机推荐
- 我们一起来聊聊并发吧,one。
引言 最近工作当中写了一个有关并发的程序,引起了LZ对并发的强烈兴趣.这一下一发不可收拾,LZ用了一个多星期,看完了这本共280+页的并发编程书.之所以能看这么快,其实这主要归功于,自己之前对并发就有 ...
- python中变量的数据类型总结
1.变量的数据类型,分为数值型和非数值型 数值型: int(整型) float(浮点型) bool (布尔型,只有True和Flase) compex(复数型, 用于科学计算) 非数值型: str(字 ...
- IEEE1588 verision 2 报文介绍
PTP 报文 PTP verision 2 报文是由 报头 / header,主体 / body 和 报尾 / suffix 组成,报尾长度可能为 0 ; PTP verision 2 报文在 ver ...
- Netty源码分析第6章(解码器)---->第2节: 固定长度解码器
Netty源码分析第六章: 解码器 第二节: 固定长度解码器 上一小节我们了解到, 解码器需要继承ByteToMessageDecoder, 并重写decode方法, 将解析出来的对象放入集合中集合, ...
- [转载]GBK 汉字内码扩展规范编码表(1.0 版)
编码表源地址:http://ff.163.com/newflyff/gbk-list/ 编码在线查询:http://www.qqxiuzi.cn/bianma/zifuji.php GBK 汉字内码扩 ...
- printf命令详解
基础命令学习目录首页 本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中 ...
- 投稿007期|令人震惊到发指的PyObject对象代码设计之美
前言 最近在重温经典漫画<SlamDunk>的全国大赛篇,其中的一个情形可以很好的诠释虎躯一震这个状态——当樱木看到流川枫一次高难度投篮时内心的感受:“经过两万次射球练习后,樱木首次明白到 ...
- Spring的Controller映射规则
URL映射 1) 一般格式@RequestMapping(value=“/test”) 2) 可以使用模板模式映射,@RequestMapping(value=“/test/{userId}”) 3) ...
- 第四节 Linux目录文件及文件基本操作
一.Linux目录结构 Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘 ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段
2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高 ...