输入包含多组测试数据。
每组第一行输入一个整数n(n<100000),表示有n个任务。
接下来n行,每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。
输出调度方式,输出如果有多种适合的调度方式,请输出字典序最小的一种。
4 Task0(Task1,Task2) Task1(Task3) Task2(NULL) Task3(NULL)
Task0 Task1 Task2 Task3
while True: try: n=int(input().strip()) list1=[] for i in range(n): index=input().strip() index1=[] for j in range(len(index)): if index[j]=='(' or index[j]==')': index1.append(',') else: index1.append(index[j]) #print(''.join(index1[:-1])) list1.append((''.join(index1[:-1])).split(',')) #print(list1) dict1={} for i in list1: if i[1:]==['NULL']: dict1[i[0]]=['u'] else: dict1[i[0]]=sorted(i[1:]) #print(dict1) dict1=sorted(dict1.items(),key=lambda x:(x[1],x[0])) result=[] for i in dict1: result.append(i[0]) print(' '.join(result)) except: break 参考大佬的方案,字典再加两重排序
人生苦短
res = [] for _ in range(int(input())): task = input()[:-1].replace('NULL', 'u').split('(') #-1去掉右括号,把NULL替换成u(比'Task'大就好),排序会靠后 res.append([task[0], sorted(task[1].split(','))]) #将后序任务也进行排序 res.sort(key=lambda x: (x[1], x[0])) #以后序任务为首要,再以前序任务为次要排序 print(" ".join(i[0] for i in res))