-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path7.scala
33 lines (26 loc) · 824 Bytes
/
7.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import scala.collection.mutable
object MinOrder extends Ordering[String] {
def compare(x: String, y: String) = y compare x
}
val edges = io.Source.stdin.getLines
.map(_.split(' '))
.map(line => (line(1), line(7)))
.toList
val nodes = edges.flatMap(e => Seq(e._1, e._2)).distinct.sorted
var sorted = mutable.ListBuffer[String]()
var inDegree = mutable.Map(edges.groupBy(_._2).mapValues(_.length).toSeq: _*)
var queue = mutable.PriorityQueue(nodes.filter(n => inDegree.getOrElse(n, 0) == 0): _*)(MinOrder)
while (queue.nonEmpty) {
val n = queue.dequeue()
sorted += n
edges
.filter(e => e._1 == n)
.foreach(e => {
val newInDegree = inDegree(e._2) - 1
inDegree.put(e._2, newInDegree)
if (newInDegree == 0) {
queue.enqueue(e._2)
}
})
}
println(sorted.mkString(""))