import sys input = sys.stdin.readline ############ ---- Input Functions ---- ############ def inp(): return(int(input())) def inlt(): return(list(map(int,input().split()))) def insr(): s = input() return(list(s[:len(s) - 1])) def invr(): return(map(int,input().split())) def suma(lista): return(sum(int(x) for x in lista)) debug = False n = inp() ileWiazan = inp() wiazania_zr = [] polaczone_z = [[] for i in range(n)] for i in range(ileWiazan): wiaz = inlt() wiazania_zr.append(str(min(wiaz))+"-"+str(max(wiaz))) polaczone_z[wiaz[0]-1].append(wiaz[1]) polaczone_z[wiaz[1]-1].append(wiaz[0]) if debug : print(wiaz, polaczone_z) if debug : print(polaczone_z) ileWiazan_cel = inp() wiazania_cel = [] for i in range(ileWiazan_cel): wiaz = inlt() wiazania_cel.append(str(min(wiaz))+"-"+str(max(wiaz))) output = [] def polacz(a, b): wspolny = (set(polaczone_z[a-1]) & set(polaczone_z[b-1])) if debug : print(a, b, wspolny) if len(wspolny) > 0: wiazania_zr.append("-".join([str(a), str(b)])) polaczone_z[a - 1].append(b) polaczone_z[b - 1].append(a) output.append( " ".join(["+", str(a), str(b)])) else: polacz(a, set(polaczone_z[b-1]).pop()) if debug : print("poczatek") print(wiazania_zr) print(wiazania_cel) while len(set(wiazania_cel) - set(wiazania_zr)) > 0: wiazanie = (set(wiazania_cel) - set(wiazania_zr)).pop() if debug : print(wiazanie, "zostalo", len(set(wiazania_cel) - set(wiazania_zr))) a = int(wiazanie.split("-")[0]) b = int(wiazanie.split("-")[1]) polacz(a, b) polacz(a, b) if debug : print("zostalo", len(set(wiazania_cel) - set(wiazania_zr)), set(wiazania_cel) - set(wiazania_zr)) if debug : print("polmetek") print(wiazania_zr) print(wiazania_cel) for wiazanie in set(wiazania_zr) - set(wiazania_cel): if debug : print(wiazanie) a = int(wiazanie.split("-")[0]) b = int(wiazanie.split("-")[1]) output.append( " ".join(["-",str(a), str(b)])) print(len(output)) for item in output: print(item)
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import sys input = sys.stdin.readline ############ ---- Input Functions ---- ############ def inp(): return(int(input())) def inlt(): return(list(map(int,input().split()))) def insr(): s = input() return(list(s[:len(s) - 1])) def invr(): return(map(int,input().split())) def suma(lista): return(sum(int(x) for x in lista)) debug = False n = inp() ileWiazan = inp() wiazania_zr = [] polaczone_z = [[] for i in range(n)] for i in range(ileWiazan): wiaz = inlt() wiazania_zr.append(str(min(wiaz))+"-"+str(max(wiaz))) polaczone_z[wiaz[0]-1].append(wiaz[1]) polaczone_z[wiaz[1]-1].append(wiaz[0]) if debug : print(wiaz, polaczone_z) if debug : print(polaczone_z) ileWiazan_cel = inp() wiazania_cel = [] for i in range(ileWiazan_cel): wiaz = inlt() wiazania_cel.append(str(min(wiaz))+"-"+str(max(wiaz))) output = [] def polacz(a, b): wspolny = (set(polaczone_z[a-1]) & set(polaczone_z[b-1])) if debug : print(a, b, wspolny) if len(wspolny) > 0: wiazania_zr.append("-".join([str(a), str(b)])) polaczone_z[a - 1].append(b) polaczone_z[b - 1].append(a) output.append( " ".join(["+", str(a), str(b)])) else: polacz(a, set(polaczone_z[b-1]).pop()) if debug : print("poczatek") print(wiazania_zr) print(wiazania_cel) while len(set(wiazania_cel) - set(wiazania_zr)) > 0: wiazanie = (set(wiazania_cel) - set(wiazania_zr)).pop() if debug : print(wiazanie, "zostalo", len(set(wiazania_cel) - set(wiazania_zr))) a = int(wiazanie.split("-")[0]) b = int(wiazanie.split("-")[1]) polacz(a, b) polacz(a, b) if debug : print("zostalo", len(set(wiazania_cel) - set(wiazania_zr)), set(wiazania_cel) - set(wiazania_zr)) if debug : print("polmetek") print(wiazania_zr) print(wiazania_cel) for wiazanie in set(wiazania_zr) - set(wiazania_cel): if debug : print(wiazanie) a = int(wiazanie.split("-")[0]) b = int(wiazanie.split("-")[1]) output.append( " ".join(["-",str(a), str(b)])) print(len(output)) for item in output: print(item) |