请用python语言转换下面的c++代码:#includebitsstdc++husing namespace std;typedef long long ll;const int N=410;const int M=50010;int nm;ll wgwS;struct edge int uvgs;aM;ll ans=0x7fffffffffffffffLL;int faNstNtop;int
import sys
from typing import List
class Edge:
def __init__(self, u: int, v: int, g: int, s: int):
self.u = u
self.v = v
self.g = g
self.s = s
def find(x: int, fa: List[int]) -> int:
if fa[x] == 0:
return x
fa[x] = find(fa[x], fa)
return fa[x]
def main():
n, m, wg, wS = map(int, sys.stdin.readline().split())
a = [Edge(0, 0, 0, 0) for _ in range(m)]
for i in range(m):
a[i].u, a[i].v, a[i].g, a[i].s = map(int, sys.stdin.readline().split())
a.sort(key=lambda x: x.g)
ans = float('inf')
fa = [0] * (n + 1)
st = [0] * (n + 1)
top = 0
for i in range(m):
for j in range(1, n + 1):
fa[j] = 0
for j in range(top, 0, -1):
if a[st[j]].s > a[i].s:
st[j + 1] = st[j]
else:
break
top += 1
st[j + 1] = i
num = 0
for j in range(1, top + 1):
fu = find(a[st[j]].u, fa)
fv = find(a[st[j]].v, fa)
if fu != fv:
fa[fu] = fv
num += 1
st[num] = st[j]
if num == n - 1:
ans = min(ans, wg * a[i].g + wS * a[st[num]].s)
top = num
if ans == float('inf'):
print(-1)
else:
print(ans)
if __name__ == "__main__":
main()
``
原文地址: https://www.cveoy.top/t/topic/iF5R 著作权归作者所有。请勿转载和采集!