根据双组网络的定义,任意一条道路的两端必须分属两个小组。因此,任选一个站点作为起始站点并分入第一个小组,则与它相邻的站点必须分入第二个小组,再继续交替分组即可。 所以我们可以用 dfs 遍历网络来统计第一个小组的站点个数,然后用总站点数减去第一个小组的站点个数就是第二个小组的站点个数,然后用第一个小组的站点个数乘以第二个小组的站点个数减去已有道路条数就是最多还能新建的道路数。
n = int(input())
某交通系统中,有 n 个站点,站点编号为 1 到 n。这些站点之间已经铺设了 n−1 条无向道路,形成一个连通且无环的网络。
定义:若能将全部站点分为两个小组,使得每一条道路的两端分别属于不同小组,则称该网络为“双组网络”。
初始网络保证是双组网络。现在你可以在任意两个尚无直接道路连接的站点之间新建一条道路。问:最多还能新建多少条道路,使得加入这些道路后整个网络仍然是双组网络?
数据范围:站点数量 n 满足 2≤n≤105。站点编号范围为 1 到 n。输入保证初始道路网络连通且无环。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.