ã‚ãªãŸã¯ãƒ¦ãƒ‹ãƒ¼ã‚¯ãªã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ 「ウンズグãƒï¼‘5ã€ã®é–‹ç™ºã«å–り組んã§ãŠã‚Šã€æ€§èƒ½ã‚’決定付ã‘るスケジューラã®è¨è¨ˆã«é ã‚’æ‚©ã¾ã›ã¦ã„る。スケジューラã¨ã¯ã€å®Ÿè¡Œã™ã¹ã処ç†ã‚’タスクã¨ã„ã†å˜ä½ã§è¡¨ç¾ã—ã€ãれらをã©ã®é †åºã§å®Ÿè¡Œã™ã‚‹ã‹ã‚’決定ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã‚る。スケジューラã¯ã‚¿ã‚¹ã‚¯ã«ï¼‘ã‹ã‚‰ N ã®ç•ªå·ã‚’ã¤ã‘ã¦ç®¡ç†ã™ã‚‹ã€‚å…¨ã¦ã®ã‚¿ã‚¹ã‚¯ã¯ K 個ã®å±žæ€§ f1, f2,..., fK ã‚’æŒã¡ã€å„属性ã«ã¯ãã‚Œãžã‚Œå›ºæœ‰ã®å€¤ãŒè¨å®šã•ã‚Œã¦ã„る。ãŸã ã—ã€ã‚ã‚‹ï¼’ã¤ã®ã‚¿ã‚¹ã‚¯ã«ã¤ã„ã¦ã€å¯¾å¿œã™ã‚‹å±žæ€§ã®å€¤ã™ã¹ã¦ãŒåŒã˜ã«ãªã‚‹ã“ã¨ã¯ãªã„。
ã‚るタスクã«ã¯ã€ãã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’始ã‚ã‚‹å‰ã¾ã§ã«å®Ÿè¡Œã‚’完了ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„タスクãŒä¸Žãˆã‚‰ã‚Œã‚‹ã“ã¨ãŒã‚る。タスクAãŒã‚¿ã‚¹ã‚¯ï¼¢ã®å‰ã«å®Œäº†ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„ã“ã¨ã‚’「タスクA → タスクBã€ã¨è¡¨ã™ã€‚例ãˆã°ã€ã‚¿ã‚¹ã‚¯ï¼‘ → タスク2ã€ã‚¿ã‚¹ã‚¯ï¼“ → タスク2ã¨ã„ã†é–¢ä¿‚ãŒã‚ã‚Œã°ã€ã‚¿ã‚¹ã‚¯ï¼’を処ç†ã™ã‚‹å‰ã«ã‚¿ã‚¹ã‚¯ï¼‘ã¨ã‚¿ã‚¹ã‚¯ï¼“ã®ä¸¡æ–¹ã®å‡¦ç†ãŒçµ‚ã‚ã£ã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„。ã“ã®ã‚ˆã†ãªé–¢ä¿‚をタスク間ã®ä¾å˜é–¢ä¿‚ã¨ã„ã†ã€‚ãŸã ã—ã€ã‚るタスクã‹ã‚‰ä¾å˜é–¢ä¿‚ã‚’ãŸã©ã£ã¦ã„ã£ã¦ã€ãã®ã‚¿ã‚¹ã‚¯ã«ãŸã©ã‚Šç€ãã“ã¨ã¯ãªã„。
スケジューラã¯ä¾å˜é–¢ä¿‚ã«å¾“ã£ã¦ã€å®Ÿè¡Œé †åºã‚’決定ã™ã‚‹ã€‚ã—ã‹ã—ã€ä¾å˜é–¢ä¿‚ã ã‘ã§ã¯é †åºãŒä¸€é€šã‚Šã«å®šã¾ã‚‰ãªã„å ´åˆãŒã‚る。ãã®ã‚ˆã†ãªå ´åˆã¯ã€å„タスクãŒæŒã¤å±žæ€§ã®å€¤ã«ã‚ˆã£ã¦ã€æ¬¡ã«å‡¦ç†ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã™ã‚‹ã€‚
ウンズグãƒï¼‘5ã®ã‚¿ã‚¹ã‚¯ã¯å±žæ€§ã‚’複数もã¤ãŸã‚ã€ã™ã¹ã¦ã®å±žæ€§ã®å€¤ã‚’考慮ã—ã¦å®Ÿè¡Œé †åºã‚’決定ã™ã‚‹å¿…è¦ãŒã‚る。ãã®ãŸã‚ã«ã€å±žæ€§ã‚’比較ã™ã‚‹é †ç•ªã‚’定ã‚ã‚‹è©•ä¾¡é †åºã‚’用ã„ã‚‹ã€‚è©•ä¾¡é †åºãŒæœ€ã‚‚å…ˆã®å±žæ€§ã‚’比較ã—ã€ãã®å±žæ€§ã®å€¤ãŒæœ€ã‚‚大ãã„タスクをé¸æŠžã™ã‚‹ã€‚ãã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ãŒè¤‡æ•°ã‚ã‚‹å ´åˆã¯ã€è©•ä¾¡é †åºãŒãã®æ¬¡ã®å±žæ€§ã§æ¯”較ã—ã€ä»¥ä¸‹åŒæ§˜ãªæ‰‹é †ã‚’ç¹°ã‚Šè¿”ã™ã€‚例ãˆã°ã€ä»¥ä¸‹ã®3 ã¤ã®å±žæ€§ã‚’æŒã¤3 ã¤ã®ã‚¿ã‚¹ã‚¯ã«ã¤ã„ã¦è€ƒãˆã‚‹ã€‚
タスク\属性 | f1 | f2 | f3 |
X | 3 | 3 | 2 |
Y | 3 | 2 | 2 |
Z | 3 | 1 | 3 |
è©•ä¾¡é †åºãŒf1 f2 f3ã€f2 f1 f3ã€ã¾ãŸã¯ f2 f3 f1 ã«è¨å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯X ãŒé¸ã°ã‚Œã‚‹ã€‚ã¾ãŸã€è©•ä¾¡é †åºãŒ f1 f3 f2ã€f3 f1 f2ã€ã¾ãŸã¯ f3 f2 f1 ã«è¨å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã‚¿ã‚¹ã‚¯Z ãŒé¸ã°ã‚Œã‚‹ã€‚
ウンズグãƒï¼‘5ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã®ç‰¹å¾´ã¯ã€å±žæ€§ã®è©•ä¾¡é †åºãŒé€”ä¸ã§ä½•åº¦ã§ã‚‚変更ã§ãã‚‹ã“ã¨ã§ã‚ã‚‹ã€‚è©•ä¾¡é †åºã¯ã€ã‚る個数ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡ŒãŒå®Œäº†ã—ãŸæ™‚点ã§å¤‰æ›´ã§ãる。ãŸã ã—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ãŒæœ€åˆã«ä½¿ã†è©•ä¾¡é †åºã¯ã‚らã‹ã˜ã‚決ã¾ã£ã¦ã„る。
å„タスクã®å±žæ€§ã®å€¤ã€ã‚¿ã‚¹ã‚¯ã®ä¾å˜é–¢ä¿‚ã€è©•ä¾¡é †åºã®å¤‰æ›´æƒ…å ±ãŒä¸Žãˆã‚‰ã‚ŒãŸã¨ãã€ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹é †åºã‚’å ±å‘Šã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã›ã‚ˆã€‚
入力ã¯ä»¥ä¸‹ã®å½¢å¼ã§ä¸Žãˆã‚‰ã‚Œã‚‹ã€‚
N K f1,1 f1,2 ... f1,K f2,1 f2,2 ... f2,K : fN,1 fN,2 ... fN,K D a1 b1 a2 b2 : aD bD e0,1 e0,2 ... e0,K R m1 e1,1 e1,2 ...… e1,K m2 e2,1 e2,2 ...… e2,K : mR eR,1 eR,2 ...… eR,K
1行目ã«ã€ã‚¿ã‚¹ã‚¯ã®æ•° N (2 ≤ N ≤ 50000) ã¨ã€å„タスクãŒæŒã¤å±žæ€§ã®æ•° K (1 ≤ K ≤ 4) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚続ã N è¡Œã«ã€ã‚¿ã‚¹ã‚¯ i ãŒæŒã¤å±žæ€§ã®å€¤ fi,j (1 ≤ fi,j ≤ 100000) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚続ã1行ã«ã€ä¾å˜é–¢ä¿‚ã®å€‹æ•° D (0 ≤ D ≤ 200000) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚続ã D è¡Œã«ä¾å˜é–¢ä¿‚ ai → bi (1 ≤ ai, bi ≤ N) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚
続ã1行ã«ã€æœ€åˆã®è©•ä¾¡é †åº e0,j (1 ≤ e0,j ≤ K) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚続ã1行ã«ã€è©•ä¾¡é †åºã®å¤‰æ›´å›žæ•° R (0 ≤ R < N) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚続ã R è¡Œã«ã€è©•ä¾¡é †åºã®å¤‰æ›´æƒ…å ±ãŒä¸Žãˆã‚‰ã‚Œã‚‹ã€‚i 回目ã®å¤‰æ›´æƒ…å ±ã¯ã€å®Ÿè¡ŒãŒå®Œäº†ã—ãŸã‚¿ã‚¹ã‚¯ã®å€‹æ•° mi (1 ≤ mi < N) ã¨è©•ä¾¡é †åº ei,j (1 ≤ ei,j ≤ K) ã‹ã‚‰ãªã‚Šã€å…¨éƒ¨ã§ mi 個ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡ŒãŒå®Œäº†ã—ãŸæ™‚点ã§ã€è©•ä¾¡é †åºã‚’ ei,1, ei,2,... , ei,K ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’示ã™ã€‚
è©•ä¾¡é †åºã®å¤‰æ›´æƒ…å ±ã¯ä»¥ä¸‹ã®æ¡ä»¶ã‚’満ãŸã™ã€‚
スケジューラãŒå‡¦ç†ã™ã‚‹é †ç•ªã«ã€ã‚¿ã‚¹ã‚¯ã®ç•ªå·ã‚’出力ã™ã‚‹ã€‚
5 3 1 5 2 3 8 5 1 2 3 5 5 5 4 8 2 0 1 2 3 2 2 2 3 1 4 3 1 2
4 5 2 1 3
5 2 1 1 2 1 3 1 4 4 5 2 3 1 4 2 4 2 5 1 2 1 3 2 1
3 2 5 1 4