POJ 1161 Walls

很好的建图题,有点繁琐,但是挺有意思的,我想了好久,中间有不少想法,敲出来一个,发现是错的,从头再敲,然后再敲出来一个,发现还不对,discuss里面有人说 BFS 神马的,我没往那方面想,一直用 floyd 加上枚举建图,最后终于A掉了……

 

YM我自己一下……

(笑吧,不过别让我知道……)

 

题意是说有 n 个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了最外面的一个),现在,如果某几个小镇上的人想要聚会,为选择哪个区域为聚会地点,可以使他们所有人总共需要穿过的墙数最小,题目上有说明,不在某个点上聚会(聚会点在某个多边形内部),行进过程中不穿过图中的点(也就是除出发点外的其他小镇)。

 

思路:

每个人的出发点一定属于某个环(多边形),两个相邻环之间要想通行的话,穿过一面墙就可以直接到达,如果不相邻的话,需要先穿过其他区域间接到达。这样,一个最短路模型就出来了。

 

把每个环当成点,以两个环之间的距离为边建图,相邻环之间距离为 1 ,不相邻的先设为无穷大,然后 floyd 暴搞,最后枚举每个区域到所有人的距离之和,找到那个合适的区域就可以了。

 

 

代码:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值