Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. PCMS Web Client
  2. ИнформацияРезультатыОтправитьРешенияВопросыФайлыВыход
  3. Исходный код
  4. Q.kt
  5. import java.io.*
  6. import java.util.*
  7. import kotlin.*
  8.  
  9. class Decomposition {
  10. val NAME = "matching"
  11. val inputFileName = NAME + ".in"
  12. val outputFileName = NAME + ".out"
  13. val MAXN = 1010
  14.  
  15. var graph = ArrayList<ArrayList<Int>>()
  16. var used = BooleanArray(MAXN, {index -> false})
  17. var p = ArrayList<Pair<Int, Int>>()
  18.  
  19. fun dfs(key: Int): Boolean {
  20. if (used[key])
  21. return false
  22. used[key] = true
  23. for (i in graph[key]) {
  24. val index = i
  25. if (p[index].second == -1 || dfs(p[index].second)) {
  26. p[key] = Pair(index, p[key].second)
  27. p[index] = Pair(p[index].first, key)
  28. return true
  29. }
  30. }
  31. return false
  32. }
  33. private fun solution(sIn: FastScanner, sOut: PrintWriter) {
  34. val n = sIn.nextInt()
  35. val w = ArrayList<Pair<Int, Int>>()
  36. for (i in 0..n - 1)
  37. w.add(Pair(0, 0))
  38. for (i in 0..n - 1)
  39. w.add(Pair(sIn.nextInt(), i))
  40. Collections.sort(w) {
  41. x, y ->
  42. if (x.first == y.first)
  43. y.second - x.second
  44. else
  45. y.first - x.first
  46. }
  47. for (i in 0..n - 1) {
  48. val m = sIn.nextInt()
  49. graph.add(ArrayList<Int>())
  50. p.add(Pair(-1, -1))
  51. for (j in 0..m - 1)
  52. graph[i].add(sIn.nextInt() - 1)
  53. }
  54. for (i in 0..n - 1){
  55. for (j in 0..n - 1)
  56. used[j] = false
  57. dfs(w[i].second)
  58. }
  59.  
  60. for (i in 0..n - 1)
  61. sOut.print("" + (p[i].first + 1) + " ")
  62. }
  63.  
  64. fun run() {
  65. FastScanner(inputFileName).use { sIn ->
  66. PrintWriter(outputFileName).use { sOut ->
  67. solution(sIn, sOut)
  68. }
  69. }
  70. }
  71.  
  72. private class FastScanner : Closeable {
  73. private val bufferedReader: BufferedReader
  74. private var stringTokenizer: StringTokenizer
  75.  
  76. constructor(inputStream: InputStream) {
  77. bufferedReader = BufferedReader(InputStreamReader(inputStream))
  78. stringTokenizer = StringTokenizer(bufferedReader.readLine())
  79. }
  80.  
  81. constructor(file: File) : this(FileInputStream(file))
  82.  
  83. constructor(fileName: String) : this(File(fileName))
  84.  
  85. override fun close() {
  86. bufferedReader.close()
  87. }
  88.  
  89. fun hasNext(): Boolean {
  90. while (!stringTokenizer.hasMoreTokens()) {
  91. stringTokenizer = StringTokenizer(bufferedReader.readLine())
  92. }
  93. return stringTokenizer.hasMoreTokens()
  94. }
  95.  
  96. fun next(): String? {
  97. if (hasNext())
  98. return stringTokenizer.nextToken()
  99. return null
  100. }
  101.  
  102. fun nextInt(): Int {
  103. return next()?.toInt()!!
  104. }
  105.  
  106. /*fun nextDouble(): Double {
  107. return next()?.toDouble()!!
  108. }
  109.  
  110. fun nextLong(): Long {
  111. return next()?.toLong()!!
  112. }*/
  113. }
  114. }
  115.  
  116.  
  117. fun main(vararg args: String) {
  118. Decomposition().run()
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement