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()
``
请用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

原文地址: https://www.cveoy.top/t/topic/iF5R 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录