Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- list_of_adjacency = [[]]
- info = [] # info[i] это номер вершины первой доли, связанной ребром с вершиной i второй доли
- used = [] # просто массив для dfs
- def kuhn(vert):
- if used[vert]:
- return False
- used[vert] = True
- for i in range(len(list_of_adjacency[vert])):
- to = list_of_adjacency[vert][i]
- if info[to] == -1 or kuhn(info[to]):
- info[to] = vert
- return True
- return False
- def main():
- with open('in.txt', 'r') as input_file:
- nums = input_file.readline().split()
- k = int(nums[0])
- l = int(nums[1])
- for i in range(k):
- list_of_adjacency.append(list(map(int, input_file.readline().split())))
- global info
- info = [-1 for i in range(l + 1)]
- for v in range(1, k + 1):
- global used
- used = [False for i in range(k + 1)]
- success = kuhn(v)
- if not success:
- with open('out.txt', 'w') as output_file:
- output_file.write('N\n')
- output_file.write(str(v))
- exit(0)
- output = [None for i in range(k + 1)]
- for i in range(l + 1):
- if info[i] != -1:
- output[info[i]] = i
- with open('out.txt', 'w') as output_file:
- output_file.write('Y\n')
- for i in range(1, k + 1):
- output_file.write(str(output[i]) + ' ')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement