Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // test case 1
- var travel = [["start","3","A"],["A","6","B"],["B","5","END"]]
- var point = ["A":10,"B": 10,"C":10,"END" : 10]
- func getMaxScore(_ travel: [[String]], _ reward : [String: Int]) -> Int{
- var map = [String: [String: Int]]() // from : [to, cost]
- var indegree = [String: Int]()
- var maxScore = [String: Int]()
- print(map)
- var queue = [String]()
- queue.append("start")
- for trip in travel{
- let from = trip[0]
- let to = trip[2]
- let cost = Int(trip[1])!
- indegree[to, default: 0] += 1
- if indegree[from] == nil {
- indegree[from] = 0
- }
- map[from, default: [String:Int]()][to] = cost
- }
- print(map)
- var visited = [String]()
- visited.append("start")
- maxScore["start"] = 0
- var res = 0
- while queue.count > 0 {
- let cur = queue.removeFirst()
- if let toMap = map[cur]{
- for (to, cost) in toMap{
- indegree[to] = indegree[to]! - 1
- if indegree[to] == 0{
- queue.append(to)
- }
- if let score = maxScore[to]{
- maxScore[to] = max(score, maxScore[cur]! + reward[to]! - cost)
- }else{
- print(cur)
- print(maxScore)
- maxScore[to] = maxScore[cur]! + reward[to]! - cost
- }
- if to == "END"{
- res = max(maxScore[to]!, res)
- }
- }
- }
- }
- return res
- }
- let res = getMaxScore(travel, point)
- print(res)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement