Buy a ticket
题意
给你n个城市,m条无向路,每条路有vi的权值(>0),每个城市有ai的音乐会花费。
某人想去看音乐会,如果她在i城,他要去j城看演出,那么要花费的钱相当于来回的路费加上j城的演唱会的钱(也可以在自家看演出)。求的是,每个城市的人看一场音乐会的最少花费。
思路
很熟悉的思路,定义一个超级原点,将超级原点和每个城市连起来,路的权值设为该城市的音乐会花费,同时加其他的路的权值设为原来的两倍(来回的花费),那么从原点到每个城市的最小花费就是每个城市的人看音乐会的最小花费。(最短路)
开头用dijkstra写,看了一下复杂度肯定会T,o(n^2)的样子,然后交了一发。后来换用SPFA,队列啥的,还是T,然后看了一下过的人的代码,发现他们用优先队列优化,将花费大的放在了前面。
看!代码
1 |
|