Description

随着社会的不断发展,人与人之间的感情越来越功利化。最近,爱神丘比特发现,爱情也已不再是完全纯洁的了。这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭。于是丘比特千里迢迢远赴中国,找到了掌管东方人爱情的神——月下老人,向他求教。月下老人告诉丘比特,纯洁的爱情并不是不存在,而是他没有找到。在东方,人们讲究的是缘分。月下老人只要做一男一女两个泥人,在他们之间连上一条红线,那么它们所代表的人就会相爱——无论他们身处何地。而丘比特的爱情之箭只能射中两个距离相当近的人,选择的范围自然就小了很多,不能找到真正的有缘人。丘比特听了月下老人的解释,茅塞顿开,回去之后用了人间的最新科技改造了自己的弓箭,使得丘比特之箭的射程大大增加。这样,射中有缘人的机会也增加了不少。情人节(Valentine's day)的午夜零时,丘比特开始了自己的工作。他选择了男女各N位,感应到他们互相之间是否有缘分。稍稍思考后,他发现恰好可以发现射出N支神箭,使每个人都找到自己的有缘人。正当他为自己的发现兴奋不已,准备射箭时,突然想到,自己只感应了是否有缘分,而没考虑缘分的大小。若是拘泥于射N支神箭,却使得某些有天地良缘的不能终成眷属,或勉强把某些只有猿粪的男女撮合在一起,便不合自己的本意了。但是,把每对男女再感应一次太耗时间,于是丘比特只好求助于你了。 Your Task 告诉你他们之间的缘分,请你找出,在射出N支神箭的前提下,哪些对有缘人一定会在一起,而哪些对有缘人一定会分开。

Input

第一行N M,表示人数与有缘人的对数接下来M行,每行X Y表示第X个男子与第Y个女子有缘分 N<=200000,M<=600000

Output

按输入顺序,对于每对有缘人输出一个数若该对有缘人一定在一起则输出1,若一定分开输出2,否则输出0

Sample Input

3 6

1 1

2 2

3 3

1 2

2 1

3 1

Sample Output

001002

题解:http://blog.csdn.net/pouy94/article/details/6423218

打了好久,终于打出来了

首先我们要求出这个题的一个完备匹配,然后再做第二问(第二问的做法请见bzoj2140: 稳定婚姻

现在就是要做第一问,n<=200000,m<=600000丧心病狂

但是还是可以做的,因为匈牙利是有优化的就是像dinic一样(虽然我没打过)先标距离标号,然后多路增广,增广时只走标号加1的点(每次多路增广前清空vis数组,多路增广时vis数组不要清空,要不然就不是多路增广,一开始我就错这里了,结果第一个点就超时,不要问我为什么知道,我是不会告诉你我为了测试这个把输出故意搞错,就是一定WA的那种)

 const
maxn=;
maxm=;
var
d,first,flag,a:array[..maxn*]of longint;
last,next,ans:array[..maxm*]of longint;
n,m,p,tot,time:longint; procedure insert(x,y:longint);
begin
inc(tot);
last[tot]:=y;
next[tot]:=first[x];
first[x]:=tot;
end; function find(x:longint):boolean;
var
i:longint;
begin
i:=first[x];
while i<> do
begin
if (flag[last[i]]<>time) and (d[x]+=d[last[i]]) then
begin
flag[last[i]]:=time;
if (a[last[i]]=) or (find(a[last[i]])) then
begin
a[last[i]]:=x;
a[x]:=last[i];
exit(true);
end;
end;
i:=next[i];
end;
exit(false);
end; var
q:array[..maxn*]of longint; procedure spfa;
var
i,l,r:longint;
begin
l:=;
r:=;
for i:= to *n do
d[i]:=-;
for i:= to n do
if a[i]= then
begin
inc(r);
q[r]:=i;
d[i]:=;
end;
while l<=r do
begin
if q[l]<=n then
begin
i:=first[q[l]];
while i<> do
begin
if d[last[i]]=- then
begin
d[last[i]]:=d[q[l]]+;
if a[last[i]]> then
begin
inc(r);
q[r]:=last[i];
end;
end;
i:=next[i];
end;
end
else
begin
inc(r);
q[r]:=a[q[l]];
d[a[q[l]]]:=d[q[l]]+;
end;
inc(l);
end;
end; procedure init;
var
i,x,y:longint;
begin
read(n,m);
for i:= to m do
begin
read(x,y);
insert(x,y+n);
insert(y+n,x);
end;
while p<n do
begin
spfa;
inc(time);
for i:= to n do
if a[i]= then
if find(i) then inc(p);
end;
end; var
dfn,low,c,s:array[..maxn*]of longint;
cnt,t:longint; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure dfs(x:longint);
var
i:longint;
begin
inc(t);
dfn[x]:=t;
low[x]:=t;
flag[x]:=time;
inc(tot);
s[tot]:=x;
i:=first[x];
while i<> do
begin
if (a[x]=last[i]) xor (x>n) then
begin
if dfn[last[i]]= then
begin
dfs(last[i]);
low[x]:=min(low[x],low[last[i]]);
end
else
if flag[last[i]]=time then low[x]:=min(low[x],low[last[i]]);
end;
i:=next[i];
end;
if dfn[x]=low[x] then
begin
inc(cnt);
while s[tot+]<>x do
begin
flag[s[tot]]:=time-;
c[s[tot]]:=cnt;
dec(tot);
end;
end;
end; procedure tarjan;
var
i:longint;
begin
for i:= to n do
if dfn[i]= then
begin
inc(time);
t:=;
tot:=;
dfs(i);
end;
end; procedure print;
var
i,j:longint;
begin
for i:= to n do
begin
j:=first[i];
while j<> do
begin
if c[i]<>c[last[j]] then
begin
if a[i]=last[j] then ans[(j+)>>]:=
else ans[(j+)>>]:=;
end;
j:=next[j];
end;
end;
for i:= to m do
write(ans[i]);
end; begin
init;
tarjan;
print;
end.

1891: 丘比特的烦恼 - BZOJ的更多相关文章

  1. KM算法及其优化的学习笔记&&bzoj2539: [Ctsc2000]丘比特的烦恼

    感谢  http://www.cnblogs.com/vongang/archive/2012/04/28/2475731.html 这篇blog里提供了3个链接……基本上很明白地把KM算法是啥讲清楚 ...

  2. 图论(KM算法):COGS 290. [CTSC2008] 丘比特的烦恼

    290. [CTSC2008] 丘比特的烦恼 ★★★   输入文件:cupid.in   输出文件:cupid.out   简单对比 时间限制:1 s   内存限制:128 MB 随着社会的不断发展, ...

  3. BZOJ2539: [Ctsc2000]丘比特的烦恼

    BZOJ2539: [Ctsc2000]丘比特的烦恼 Description 随着社会的不断发展,人与人之间的感情越来越功利化. 最近,爱神丘比特发现,爱情也已不再是完全纯洁的了. 这使得丘比特很是苦 ...

  4. cogs 290. [CTSC2000] 丘比特的烦恼

    290. [CTSC2000] 丘比特的烦恼 ★★★   输入文件:cupid.in   输出文件:cupid.out   简单对比时间限制:1 s   内存限制:128 MB 随着社会的不断发展,人 ...

  5. bzoj2539 丘比特的烦恼、黑书P333 (最优二分图匹配)

      丘比特的烦恼 题目描述 Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女, ...

  6. 【刷题】BZOJ 2539 [Ctsc2000]丘比特的烦恼

    Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭.于是 ...

  7. BZOJ 2539: [Ctsc2000]丘比特的烦恼

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 695  Solved: 260[Submit][Status][Discuss] Description ...

  8. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  9. [CTSC2000]丘比特的烦恼

    Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭.于是 ...

随机推荐

  1. 关于Windows® API Code Pack for Microsoft® .NET Framework

    相比之前的操作系统,Window 7(or Vista)提供了很多新特性,我们在应用实现中可以利用这些特性来提升用户体验. 这些特性主要包括以下几个方面: Shell Enhancements Dir ...

  2. C# lock用法

    当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...

  3. 对象this、currentTarget和target

    在事件处理程序内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标.如果直接将事件处理程序指定给了目标元素,则this.currentTarget和targe ...

  4. 如何给xml应用样式

    引子:可扩展标记语言xml(Extensible Markup Language)自己平常也用到的不多,除了在ajax处理服务器返回的数据可能会用到外(不过一般用json处理数据的比较常见)还真没怎么 ...

  5. 卸载Linux内置的AMP软件

    卸载Linux内置的AMP软件 在安装Linux软件的LAMP环境时,必须有一个前提:必须要完全卸载掉系统内置的AMP软件. 1.卸载httpd软件(Apache) 如果在卸载软件时出现依赖关系,我们 ...

  6. 3D球状标签云(兼容IE8)

    看见一个很有趣的标签云,3D球状,兼容 IE 8,亲测可用!其他版本没有测试.觉得挺有意思就拿来记录下来,学习学习,本文下方会放出我看的文章地址,先看一下效果: 接下来是代码,html + css + ...

  7. 记录一次会话CRT

    记录一次会话CRT --------------------- su -oracle sqlplus / as sysdba sqlplus username/password  如:普通用户登录   ...

  8. linux kernel with param

    Linux kernel support pass param to kernel, this params can be assigned at load time by insmod or mod ...

  9. 《Java核心技术与最佳实践》读书笔记

    第一章 Java7新语法 1.switch中使用字符串 2.增加二进制表示0b10101010:数字字面量允许直径使用下划线12_34_90 3.一个catch字句捕获多个异常,多个异常之间用|分隔 ...

  10. sqlServer2008 手工注入

    接着上一篇的<mysql手工注入> 参考:http://hi.baidu.com/ciqing_s/item/971bf994365130accc80e5ed http://hi.baid ...