Salve a tutti!
In realtà dipende dall’implentazione, io con kruskal sto sui 0.34s,
magari hai scritto qualcosa di non troppo giusto che rallenta di molto l’esecuzione.
Ho controllato, la mia implementazione è identica a quella del libro “Competitive programming 3”, dopo tutto l’ho imparata da lì.
Non ho il libro sottomano, la versione del CP3 usa un while per creare l’MST giusto?
No, ordina gli archi e poi li prende (utilizzando una Union Find) con un for tutti quelli i cui vertici non appartengono a uno stesso insieme.
Il for termina quando prendi N-1 archi?
Ah… no. Non pensavo si mangiasse tanto tempo. Ora lo risolve in 1.42, più di mezzo secondo in meno.
bhè se non ti fermi controlli tutti gli archi ( 1M )
se ti fermi controlli circa 10k, nel caso migliore ti risparmi 990000 chiamate alla funzione unionfind…
Il primo codice che ho inviato va in 0.76 senza fermarsi a N-1… Mi sa che hai comunque qualche altro problema
Forse la lentezza è nella lettura dell’input. Se usi cin/cout prova a inserire ios_base::sync_with_stdio(false); come prima istruzione della main().
Forse la lentezza è nella lettura dell'input. Se usi cin/cout prova a inserire ios_base::sync_with_stdio(false); come prima istruzione della main().Non volevo agire sull'I/O, mi sembra come barare. Però evidentemente usare l'freopen() è abbastanza lento rispetto all'utilizzo di ifstream/ofstream (cosa che non sapevo).wil93
evidentemente usare l'freopen() è abbastanza lento rispetto all'utilizzo di ifstream/ofstreamUhm... Non credo sia freopen il problema, sono proprio ifstream/ofstream che sono lenti, a meno che non si disattivi la sincronizzazione come in questo caso (e se lo si fa a volte possono anche essere più veloci di scanf/printf).Lawliet