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) |
English