Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.18 KB | None | 0 0
  1. fin = open("input.txt")
  2. lines = []
  3. for line in fin:
  4.     lines.append(line)
  5. n = len(lines) - 1
  6. print(n)
  7.  
  8. d = []
  9. smejnost = []
  10. v = []
  11. vstar = []
  12. p = []
  13. inf = 1e9
  14. for i in range(n):
  15.     d.append([])
  16.     p.append([])
  17.     smejnost.append([])
  18.     v.append(0)
  19.     vstar.append([])
  20.     for j in range(n):
  21.         smejnost[i].append(0)
  22.         d[i].append(inf)
  23.         p[i].append(0)
  24.         vstar[i].append(0)
  25.  
  26. for i in range(n):
  27.     s = lines[i]
  28.     a, s = s.split('=')
  29.     ss = s.split(')')
  30.     a = int(a)
  31.     a -= 1
  32.     for c in range(len(ss) - 1):
  33.         sss = ss[c].split('(')
  34.         b, cost = sss[1].split(',')
  35.         b = int(b)
  36.         cost = int(cost)
  37.         b -= 1
  38.         d[a][b] = cost
  39.         smejnost[a][b] = cost
  40. fin.close()
  41.  
  42. mxlen = 0
  43. for i in range(n):
  44.     for j in range(n):
  45.         mxlen = max(mxlen, smejnost[i][j])
  46.  
  47. mxlen *= n
  48. for i in range(n):
  49.     for j in range(n):
  50.         if smejnost[i][j] == -1:
  51.             smejnost[i][j] = mxlen
  52.         d[i][j] = smejnost[i][j]
  53. s = lines[n]
  54. s = s[1:len(s) - 1].split(',')
  55. for c in s:
  56.     a, b = c.split(':')
  57.     a = int(a)
  58.     b = int(b)
  59.     v[a - 1] = b
  60.  
  61. for i in range(n):
  62.     d[i][i] = 0
  63.  
  64. for k in range(n):
  65.     for i in range(n):
  66.         for j in range(n):
  67.             if d[i][k] < inf and d[k][j] < inf:
  68.                 d[i][j] = min(d[i][j], d[i][k] + d[k][j])
  69.  
  70. CBB = []
  71. for i in range(n):
  72.     CBB.append(0)
  73.     for j in range(n):
  74.         CBB[i] += d[i][j]
  75. mediana = 0
  76. for i in range(n):
  77.     if CBB[mediana] > CBB[i]:
  78.         mediana = i
  79.  
  80. MBB = []
  81. for i in range(n):
  82.     MBB.append(d[i][0])
  83.     for j in range(n):
  84.         MBB[i] = max(MBB[i], d[i][j])
  85. center = 0
  86. for i in range(n):
  87.     if MBB[center] > MBB[i]:
  88.         center = i
  89.  
  90. print("Smejnost")
  91. for i in range(n):
  92.     s = ""
  93.     for j in range(n):
  94.         s += str(smejnost[i][j]) + ' '
  95.     print(s)
  96. print("D")
  97. for i in range(n):
  98.     s = ""
  99.     for j in range(n):
  100.         s += str(d[i][j]) + ' '
  101.     print(s)
  102. print("center " + str(center + 1))
  103. print("mediana " + str(mediana + 1))
  104.  
  105. print("Находим все P")
  106. P = inf
  107. for i in range(n):
  108.     for j in range(i + 1, n):
  109.         if smejnost[i][j] > 0:
  110.             # print(i+1,j+1,end=': ')
  111.  
  112.             for k in range(n):
  113.                 if k == i or k == j:
  114.                     continue
  115.                 if v[k] * min(d[k][i], d[k][j]) > p[i][j]:
  116.                     vstar[i][j] = k
  117.                     p[i][j] = v[k] * min(d[k][i], d[k][j])
  118.  
  119.  
  120.             # print(v[k]*min(d[k][i],d[k][j]),end=', ')
  121.  
  122.  
  123.             print("Rebro ({},{})".format(i + 1, j + 1))
  124.             print(p[i][j])
  125.  
  126.             P = min(P, p[i][j])
  127. print("Находим все H")
  128. H = inf
  129. for i in range(n):
  130.     for j in range(i + 1, n):
  131.         if smejnost[i][j] > 0:
  132.             H = min(H, p[i][j] + v[vstar[i][j]] * smejnost[i][j] / 2)
  133.  
  134.         print("Rebro ({},{})".format(i + 1, j + 1))
  135.         print(min(H, p[i][j] + v[vstar[i][j]] * smejnost[i][j] / 2))
  136. print("P =", P)
  137. print("H =", H)
  138. print("rebra kotorie ostalis")
  139. for i in range(n):
  140.     for j in range(n):
  141.         #if H >= smejnost[i][j] >= P:
  142.         if H >= p[i][j] >= P and smejnost[i][j]!=mxlen:
  143.             print(i + 1, j + 1)
  144.         else:
  145.             smejnost[i][j] = 0
  146.  
  147. for i in range(n):
  148.     for j in range(n):
  149.         d[i][j] *= v[j]
  150. print("D")
  151. for i in range(n):
  152.     s = ""
  153.     for j in range(n):
  154.         s += str(d[i][j]) + ' '
  155.     print(s)
  156.  
  157. ok = False
  158. minf = 0
  159. minv1 = 0
  160. minv2 = 0
  161. fepsilon = 0
  162. for i in range(n):
  163.     for j in range(n):
  164.         if smejnost[i][j] > 0:
  165.             print("Rebro ({},{})".format(i+1, j+1))
  166.  
  167.             print("Ksi")
  168.             e = []  # 1 etap
  169.             for k in range(n):
  170.                 brv = d[j][k]
  171.                 alv = d[i][k]
  172.                 vv = v[k]
  173.                 #  print("brv = {} alv = {} vv = {} toapp = {}".format(brv,alv,vv,(brv-alv)/(2*vv)))
  174.                # e.append((brv - alv) / (2 * vv))
  175.                 e.append((alv+d[i][j]-brv) / 2 )
  176.             print(e)
  177.  
  178.             print("eps")
  179.             eps = []  # 2 этап
  180.             for v1 in range(n):
  181.                 eps.append([])
  182.                 for v2 in range(n):
  183.                     #           print("Look for {},{}".format(v1, v2))
  184.                     bv1 = d[j][v1]
  185.                     av2 = d[i][v2]
  186.                     vv1 = v[v1]
  187.                     vv2 = v[v2]
  188.                     #print("Нахождение eps")
  189.                     #print("bv1 = {} av2 = {} vv1 = {} vv2 = {} L = {} ".format(bv1,av2,vv1,vv2,d[i][j]))
  190.  
  191.                     #eps[v1].append((bv1 - av2) / (vv1 + vv2))
  192.                     eps[v1].append((vv2*(av2+d[i][j])-bv1*vv1) / (vv1+vv2))
  193.  
  194.                 print(eps[v1])
  195.  
  196.             print("f")
  197.             f = []  # 3 этап
  198.             found = False
  199.             mnv1 = 0
  200.             mnv2 = 0
  201.             mnf = 0
  202.             for v1 in range(n):
  203.                 f.append([])
  204.                 for v2 in range(n):
  205.                     bv1 = d[j][v1]
  206.                     vv1 = v[v1]
  207.                     #f[v1].append(bv1 - vv1 * eps[v1][v2])
  208.  
  209.                     # if i == 0 and j == 2 and v1 == 1 and v2 == 3:
  210.                     #    print("CHECK ",f[v1][v2])
  211.                     #if e[v1] <= eps[v1][v2] <= smejnost[i][j] and 0 < eps[v1][v2] < e[v2]:
  212.  
  213.  
  214.                     f[v1].append((bv1 +  eps[v1][v2])*vv1)
  215.                     #print("L={}".format(smejnost[i][j]))
  216.                     #print("e[v1] = {} e[v2] = {}".format(e[v1], e[v2]))
  217.                     #print("eps[v1][v2]={}".format(eps[v1][v2]))
  218.                     if e[v2] <= eps[v1][v2] <= smejnost[i][j] and 0 <= eps[v1][v2] <= e[v1]:
  219.                         #print("Подходит")
  220.                         if not found:
  221.                             found = True
  222.                             mnf = f[v1][v2]
  223.                             mnv1 = v1
  224.                             mnv2 = v2
  225.                         else:
  226.                             if f[v1][v2] < mnf:
  227.                                 mnf = f[v1][v2]
  228.                                 mnv1 = v1
  229.                                 mnv2 = v2
  230.                     #else:
  231.                         #print("Не подходит")
  232.  
  233.                 #print("f")
  234.                 print(f[v1])
  235.                 #print(" ")
  236.             print("f* = {} eps = {}".format(mnf, eps[mnv1][mnv2]))
  237.             fl = 0  # 4 ETAP
  238.             fr = 0
  239.             for v1 in range(n):
  240.                 fl = max(fl, d[v1][i])
  241.                 fr = max(fr, d[v1][j])
  242.             print("fl = {} fr = {}".format(fl, fr))
  243.             epsilon = 0
  244.             a = sorted([fl, fr, mnf])
  245.             if a[0] == fr:
  246.                 epsilon = fr
  247.             elif a[0] == mnf:
  248.                 epsilon = eps[mnv1][mnv2]
  249.  
  250.             if not ok:  # 5 etap
  251.                 ok = True
  252.                 fepsilon = epsilon
  253.                 minf = mnf
  254.             else:
  255.                 if mnf < minf:
  256.                     minf = mnf
  257.                     minv1 = i
  258.                     minv2 = j
  259.                     fepsilon = epsilon
  260.             print("f = {} eps = {}".format(minf, epsilon))
  261. print("min f = {}, epsilon = {}, ({},{})".format(minf, fepsilon, minv1 + 1, minv2 + 1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement