上一篇我刷了pku的三道,都是用Tarjan写的代码,主体部分相同,唯独处理不一样,在这里仅提供每道题的思路。

hdu1827 Summer Holiday

分析:

wiskey大牛要通过电话通知大家,如果你有别的队员的电话,就可以有你代劳通知这些人,通知每个人的话费是不一样的,wiskey要花费最少达到通知所有人的目的。打电话这种模型具有传递性,用<A, B>来表示A可以通知到B,即如果<A, B>,且<B, C>,则<A, C>。

很明显的强连通问题,将所有分支缩成点,wiskey只要通知所有入度为0的分支,就能通知到所有人。题上要求花费最少,只要对每个入度为0的分支,找到费用最少的节点,作为通知到这一分支的费用即可。

hdu1269 迷宫城堡

分析:

题意很容易明白,有N个房间,M个通道,形如<A, B>,表示有通道可从A到达B。

问:是否任意两个房间可以互达,是,输出Yes,否者,输出No。

这个问题就转化成整个图是否是个强连通图,也就是说,这个图里的强连通分量是否有且只有一个。

hdu2767 Proving Equivalences

分析:

一看矩阵相乘,还以为是数学题呢,往下再看,就是一强连通分支题。

题意:在数学里面有两种关系,一种是充分条件,即对于集合p,q,p => q,另一种是等价关系,p => q && q =>p, 这两种关系都具有传递性,p => q 可以对应到有节点p到节点q有一条边。

问:给定一些集合的充分性关系,确定出若让所有集合都等价,还需在添加最少的充分性条件。

这个问题可以转化成:还需要多少充分关系,才能使得整个图变成一个强连通图,只需要缩点后,求得入度为0的分支个数n1,出度为0的分支个数n2,输出两者中较大者即可。

 

posted on 2010-08-06 20:37  ylfdrib  阅读(592)  评论(0编辑  收藏  举报