有这么一个无自环的有向图,它的顶点数在30和40之间(包括30和40)。对于图里面的任意两个点A和B,要么存在一条有向边A->B,要么存在唯一的一个“中间点”C使得A可以通过A->C->B两步走到B。换句话说,对任意给定的A、B两点,从A到B的长度不超过2的路径有且仅有一条。注意,即使当A=B时,这个条件也是成立的。试问这个图有多少个顶点。
这道题有趣就有趣在,我们的突破口居然是考察A、B两点间长度为2或3的路径数。假设A有p个后继节点(即从A出发的边有p条),B有q个前驱节点(即有q条边指向B),那么从A到B的路径中长度为2或3的一共有多少条?你可能会说:当然有p条咯!因为A有p个后继节点,而每个后继节点两步之内走到B恰有一种方法。但为什么不说答案是q呢?有q个点可以直达B,而点A在两步之内到这q个点的路径都是唯一的,这就说明从A到B长为2或3的路径数目为q。这告诉我们,p和q是相等的,即A的出度和B的入度相等。再找一个点C,则我们立即可知C的出度也等于B的入度,于是A和C的出度相等。你会立刻发现:搞了半天,这个图的所有点的出度和所有点的入度全部相等。假设这个数字为k,即每个点的前驱和后继都有k个。从某个点A出发,走一步可以到达k个点,再走一步就可以到达k*k个点,这k+k*k个点恰好就是所有点的个数,既无重复也无遗漏。由于30 <= k+k*k <= 40,我们得到k=5,这个图的顶点数为30。 且慢!我们还没说明满足条件的图真的存在呢!事实上,考虑这样30个点{V_ij|1<=i<=6, 1<=j<=6, i≠j},从V_ij到V_kl有边当且仅当j=k。这个图显然满足我们的题目条件。