上一篇我刷了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,输出两者中较大者即可。