|
||||||||||
Assembling ServicesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 306 Accepted Submission(s): 51 Special Judge Problem Description In this problem, you need to simulate the execution of n service programs P1, P2, ..., Pn. Each program is described with sequence of integers: T I in1 in2 ... inI O out1 out2 ... outO, that means it takes T unit time to execute, needs I input variables (i.e. in1 in2 ... inI), and sets O output variables (i.e. out1 out2 ... outO) when it finishes running. A program can be started if and only if all these T input variables are ready (initially available, or set by some other programs). Imagine you have a super-computer which can execute as many programs in parallel as you like, and every variable can be read and written simultaneously by multiple programs. Your task is to calculate a particular "target" variable, as soon as possible. Assume there are 4 programs, shown in the table below: The quickest time to get X5 is 7, if only X1 is available at startup. You also need to construct an expression that shows how to execute the programs to achieve the minimal time. The grammar of the expression is recursive:
Input There will be at most 100 test cases. Each case begins with three integers n, m, o(1 <= n,m <= 500, 1 <= o <= m). The number of programs is n, the number of variables is m, and the target variable is Xo. Variables are numbered 1 to m, programs are numbered 1 to n. The next line contains a 01 string of m characters. The i-th character is 1 if and only if the i-th variable is initially available. The target variable is guaranteed to be unavailable at startup. The following n lines describe the programs. Each line begins with an integer T(1 <= T <= 100), the execution time, and an integer I followed by I integers in1, in2, ..., inI, as stated above, then an integer O followed by O integers out1, out2, ..., outO. 1 <= ini,outi <= m, 1 <= I,O <= 10. The last test case is followed by n=m=o=0, which should not be processed. Output For each test case, print the case number and the total time needed to get the target variable. If it's not possible to get the target variable, print -1 in stead. If it's possible to get the target variable, print the expression after that, in the same line. Be sure to print a valid expression having at most 10,000 characters, with each program printed at most once. There should be no whitespace characters within the expression. To make this problem a little bit easier, it's allowed that some programs finish after the optimal time, as long as the target variable is available at the optimal time. You¡¯re also allowed to print redundant parentheses (pay attention to the expression length, though). If such an expression does not exist, print "Can't do in serial-parallel.", without quotes. Print a blank line after the output of each test case. Sample Input
Sample Output
Hint Explanation After a variable is set, it'll keep available forever. That's why P3 can be executed, in the third example. Also note that there are some other correct expressions for the first sample, e.g.((P1P3P4)|P2). You can even print (((P1P3)P4)|P2) or ((P1(P3P4))|P2). Any one of them is acceptable in this problem. Source | ||||||||||
|