V个城市之间两两相连,给定E条需要走的边,走过一条边需要时间T。求走完所有的E条边需要的最少时间。E条边不一定在一个连通图中。
竟然卡在ifndef ONLINE_JUDGE
上好久,单词ONLINE
手滑打成了ONLIEN
,= =。吐血。
紫书第六章结束
链接
题目链接Uva12118-Inspetor’s Dilemma
参考SingleK’s Blog精简了自己的代码。
题解
因为E条边不一定在一个连通图中,所以首先DFS遍历连通块,统计每一个连通块中度数为奇数的结点个数。若能满足构成欧拉路的条件,则一次“一笔画”就可以走完当前连通块中的边。若不能构成欧拉路(奇度数结点个数大于2),则通过加边的方式,使其可以构成欧拉路。n个连通块之间还需要n - 1条边连接。
所以最后的所需要走过的边是E,加上添加边的个数,再加上连通块个数减1。
最后不要忘记乘以T得到总耗时 = =,以及当给定E为0时,结果会出现负数,要特判。
代码
1 | /* |