失恋阵线同盟

7 篇文章 0 订阅
[description] 莉莉安女学园的少女们,今天也带着无垢的笑容,穿过等身高的校门。但是,鲜为人知的是,每个少女都暗恋着另一位同学。而害羞的少女们都没有对对方表白。也许是怕说出以后,得到的回答不是自己希望听到的吧。毕竟,大多数人是单恋,而像A喜欢B,B喜欢C,C喜欢D,。。。,F喜欢G,G又喜欢A这种情况也是很常见的。假设没有人自恋。一些少女自发组成了“失恋阵线同盟”,目的为了互相鼓励,得到意中人的认可。组成同盟唯一的条件是,“同盟”中的任意两个人不能有“喜欢”的关系,也就是“互不喜欢”。现在,告诉你每一位少女恋慕的对象,请计算一下,“失恋阵线同盟”的人数,最大有多大? 
  
[input] 输入分两行。第一行是一个自然数N。(2<=N<=1000000)  第二行包含N个自然数a[1],a[2],...,a[N],以空格隔开。(1<=a[i]<=N,a[i]!=i) a[i]=j表示:少女i喜欢少女j。 
  
[output] 输出一个自然数s,s是“同盟”的最大大小。 即:求最大的s,使得:存在相异整数b[1],b[2],...,b[s](都在1..N的范围内),使得:{a[b[1]],a[b[2]],...,a[b[s]]}与{b[1],b[2],...,b[s]}没有交集。 
  
[sample input] 

2 3 4 2 6 5 
  
[sample output] 

  
[hint] 第一位少女没人喜欢,她可以加入;因为2,3,4是一个圈圈,所以她们中间只能选1个人;5,6互相喜欢,所以只能选一个人。一种可能的选法是选{1,3,5}四人组成同盟。 
  
[hint2] 如果存在K使得N>=3K,那么至少可以选出K个人组成同盟。可以证明。 


思路:

本问题等价于求解最大独立集。构建一个图,图的每个节点代表一个学生,如果两个学生之间有喜欢或者被喜欢的关系,那么他们之间连一条边。求最大失恋同盟,等价于求解最大独立集。注意,此题假设女同学们都是同性恋。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值