from collections import defaultdict n = int(input()) ms = int(input()) wiazania = [] operacje = [] graf = defaultdict(list) for i in range(ms): wiazanie = sorted([int(x) for x in input().split()]) wiazania.append(wiazanie) graf[wiazanie[0]].append(wiazanie[1]) graf[wiazanie[1]].append(wiazanie[0]) md = int(input()) potrzebne = [] wiazania_celu = [] for i in range(md): wiazanie = sorted([int(x) for x in input().split()]) if wiazanie not in wiazania: potrzebne.append(wiazanie) wiazania_celu.append(wiazanie) def nurek(start, cel, historia): for i in graf[start]: if i not in historia: historia.append(i) if i == cel: return historia if nurek(i, cel, historia): return historia historia.pop() return False for x in potrzebne: route = nurek(x[0], x[1], [x[0]]) for i in range(len(route)//4): wiazania.append([route[i], route[i+2]]) operacje.append(f"+ {route[i]} {route[i+2]}") wiazania.append([x[0], x[1]]) operacje.append(f"+ {x[0]} {x[1]}") # tutaj powinny być dodane teraz usune set1 = set(tuple(x) for x in wiazania) set2 = set(tuple(x) for x in wiazania_celu) difference = set1 - set2 for x in difference: route = nurek(x[0], x[1], [x[0]]) for i in range(len(route)//4): wiazania.remove([route[i], route[i+2]]) operacje.append(f"- {route[i]} {route[i+2]}") wiazania.remove([x[0], x[1]]) operacje.append(f"- {x[0]} {x[1]}") print(len(operacje)) for i in operacje: print(i)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | from collections import defaultdict n = int(input()) ms = int(input()) wiazania = [] operacje = [] graf = defaultdict(list) for i in range(ms): wiazanie = sorted([int(x) for x in input().split()]) wiazania.append(wiazanie) graf[wiazanie[0]].append(wiazanie[1]) graf[wiazanie[1]].append(wiazanie[0]) md = int(input()) potrzebne = [] wiazania_celu = [] for i in range(md): wiazanie = sorted([int(x) for x in input().split()]) if wiazanie not in wiazania: potrzebne.append(wiazanie) wiazania_celu.append(wiazanie) def nurek(start, cel, historia): for i in graf[start]: if i not in historia: historia.append(i) if i == cel: return historia if nurek(i, cel, historia): return historia historia.pop() return False for x in potrzebne: route = nurek(x[0], x[1], [x[0]]) for i in range(len(route)//4): wiazania.append([route[i], route[i+2]]) operacje.append(f"+ {route[i]} {route[i+2]}") wiazania.append([x[0], x[1]]) operacje.append(f"+ {x[0]} {x[1]}") # tutaj powinny być dodane teraz usune set1 = set(tuple(x) for x in wiazania) set2 = set(tuple(x) for x in wiazania_celu) difference = set1 - set2 for x in difference: route = nurek(x[0], x[1], [x[0]]) for i in range(len(route)//4): wiazania.remove([route[i], route[i+2]]) operacje.append(f"- {route[i]} {route[i+2]}") wiazania.remove([x[0], x[1]]) operacje.append(f"- {x[0]} {x[1]}") print(len(operacje)) for i in operacje: print(i) |