PAT T1001. Battle Over Cities - Hard Version (35)

#e9015584e6a44b14988f13e2298bcbf9
import sys as O0O0OO00OOOOOO0O0 
inf =0x3fffffff 
class Sume :
    def __init__ (O00OOO000O0O00OO0 ,OOO00OO0OOO0O0O00 ,OOO00000O0OOO0O0O ,OO00O0OOOO0O0OOOO ,O0OO0O000O0O00OOO ):
        O00OOO000O0O00OO0 .u =OOO00OO0OOO0O0O00 
        O00OOO000O0O00OO0 .v =OOO00000O0OOO0O0O 
        O00OOO000O0O00OO0 .w =OO00O0OOOO0O0OOOO 
        O00OOO000O0O00OO0 .st =O0OO0O000O0O00OOO 
    def __lt__ (OOOOO0OO000O0O000 ,OO0O00OOO0OOO0O00 ):
        if OOOOO0OO000O0O000 .st ==OO0O00OOO0OOO0O00 .st :
            return OOOOO0OO000O0O000 .w return OOOOO0OO000O0O000 .st >=OO0O00OOO0OOO0O00 .st 
def recurve (OO000O00OOO0O000O ):
    if f [OO000O00OOO0O000O ]==OO000O00OOO0O000O :
        return OO000O00OOO0O000O 
    else :
        f [OO000O00OOO0O000O ]=recurve (f [OO000O00OOO0O000O ])
        return f [OO000O00OOO0O000O ]
def might (OOO0000O0OO0000O0 ,OOOO0OOO00OOO0000 ):
    O0000OOOOOOOOO0OO =recurve (OOO0000O0OO0000O0 )
    OOOO00O00O0OO0O00 =recurve (OOOO0OOO00OOO0000 )
    if O0000OOOOOOOOO0OO ==OOOO00O00O0OO0O00 :
        return False 
    f [O0000OOOOOOOOO0OO ]=OOOO00O00O0OO0O00 
    return True 
def MST (O0O00000O0OO00OOO ,OO00OO00O00O0O00O ,OO000O00OOOOOOOO0 ):
    OOOO0O0OOOO0OOO00 =0 
    O00OOO0O0000OOOOO =0 
    for O00OOO00O0OO0OOOO in OO00OO00O00O0O00O :
        if O00OOO00O0OO0OOOO .u !=OO000O00OOOOOOOO0 and O00OOO00O0OO0OOOO .v !=OO000O00OOOOOOOO0 :
            if might (O00OOO00O0OO0OOOO .u ,O00OOO00O0OO0OOOO .v ):
                O00OOO0O0000OOOOO +=1 
                if O00OOO00O0OO0OOOO .st <1 :
                    OOOO0O0OOOO0OOO00 +=O00OOO00O0OO0OOOO .w 
        if O00OOO0O0000OOOOO >O0O00000O0OO00OOO -2 :
            break 
    if O00OOO0O0000OOOOO 2 :
        return inf 
    return OOOO0O0OOOO0OOO00 
def nxln ():
    return O0O0OO00OOOOOO0O0 .stdin .readline ()
def main ():
    OOOOO000000O0O000 =nxln ()
    OOOO0000O000O0OO0 =OOOOO000000O0O000 .split (' ')
    O000OO000OOOO0OOO =int (OOOO0000O000O0OO0 [0 ])
    O0OO00000000O00O0 =int (OOOO0000O000O0OO0 [1 ])
    O0OO0OOOO000OO000 =[0 ]*(O000OO000OOOO0OOO +1 )
    OOO000O0O0O00OOOO =[0 ]
    for O0OO0OOO0O000O0OO in range (1 ,O000OO000OOOO0OOO +1 ):
        OOO000O0O0O00OOOO .append (O0OO0OOO0O000O0OO )
    OOO00OOO00OOO0000 =[]
    for O0OO0OOO0O000O0OO in range (1 ,O0OO00000000O00O0 +1 ):
        OOOOO000000O0O000 =nxln ()
        OOOO0000O000O0OO0 =OOOOO000000O0O000 .split (' ')
        OO00O00OOOOO0O000 =int (OOOO0000O000O0OO0 [0 ])
        OOO000OOO000O0OOO =int (OOOO0000O000O0OO0 [1 ])
        OOO000O0OOOO0OOOO =int (OOOO0000O000O0OO0 [2 ])
        OOOO00O0OO0OOO000 =int (OOOO0000O000O0OO0 [3 ])
        OOO00OOO00OOO0000 .append (Sume (OO00O00OOOOO0O000 ,OOO000OOO000O0OOO ,OOO000O0OOOO0OOOO ,OOOO00O0OO0OOO000 ))
    OOO00OOO00OOO0000 .sort ()
    OOO0OO00OOOOO0000 =[0 ]
    global f 
    for O0OO0OOO0O000O0OO in range (1 ,O000OO000OOOO0OOO +1 ):
        f =list (OOO000O0O0O00OOOO )
        O0OO0OOOO000OO000 [O0OO0OOO0O000O0OO ]=MST (O000OO000OOOO0OOO ,OOO00OOO00OOO0000 ,O0OO0OOO0O000O0OO )
        if O0OO0OOOO000OO000 [O0OO0OOO0O000O0OO ]>O0OO0OOOO000OO000 [OOO0OO00OOOOO0000 [0 ]]:
            OOO0OO00OOOOO0000 .clear ()
            OOO0OO00OOOOO0000 .append (O0OO0OOO0O000O0OO )
        elif O0OO0OOOO000OO000 [O0OO0OOO0O000O0OO ]==O0OO0OOOO000OO000 [OOO0OO00OOOOO0000 [0 ]]and O0OO0OOOO000OO000 [O0OO0OOO0O000O0OO ]>0 :
            OOO0OO00OOOOO0000 .append (O0OO0OOO0O000O0OO )
    for O0OO0OOO0O000O0OO in range (0 ,len (OOO0OO00OOOOO0000 )):
        print (OOO0OO00OOOOO0000 [O0OO0OOO0O000O0OO ],end =(" "if O0OO0OOO0O000O0OO 1 else ""))
if __name__ =="__main__":
    main ()

你可能感兴趣的:(PAT T1001. Battle Over Cities - Hard Version (35))