#include #include #define TRUE 1 #define FALSE 0 typedef struct { int u; int v; int w; } Veza; void promeniPripadnost( int u, int v, int *pripadnost, int brCvorova ) { int trazenaPripadnost = pripadnost[ v ]; for ( int i = 1; i <= brCvorova; i ++ ) if ( pripadnost[ i ] == trazenaPripadnost ) pripadnost[ i ] = pripadnost[ u ]; } int main() { int brCvorova, brVeza; scanf("%d%d", &brCvorova, &brVeza ); int *pripadnost = ( int * ) malloc( ( brCvorova + 1 ) * sizeof( int ) ); int *uvrsteneveza = ( int *) malloc( ( brVeza + 1 ) * sizeof( int ) ); Veza *veza = ( Veza * ) malloc( ( brVeza + 1 ) * sizeof( Veza ) ); for ( int i = 1; i <= brCvorova; i ++ ) pripadnost[ i ] = i; for ( int i = 1; i <= brVeza; i++ ) { scanf("%d%d%d", &veza[ i ].u, &veza[ i ].v, &veza[ i ].w ); uvrsteneveza[ i ] = FALSE; } int p, q; scanf("%d%d", &p, &q ); for ( int i = 1; i <= brVeza; i ++ ) if ( veza[ i ].w % p == 0 ) veza[ i ].w = ( veza[ i ].w / p - 1 ) * q; else veza[ i ].w = veza[ i ].w / p * q; for ( int i = 1; i < brVeza; i ++ ) for ( int j = i + 1; j <= brVeza; j ++ ) if ( veza[ i ].w > veza[ j ].w ) { Veza p = veza[ i ]; veza[ i ] = veza[ j ]; veza[ j ] = p; } int suma = 0; for ( int trenutnaVeza = 1, brUvrstenih = 0; brUvrstenih < brCvorova - 1; trenutnaVeza ++ ) if ( pripadnost[ veza[ trenutnaVeza ].u ] != pripadnost[ veza[ trenutnaVeza ].v ] ) { promeniPripadnost( veza[ trenutnaVeza ].u, veza[ trenutnaVeza ].v, pripadnost, brCvorova ); suma += veza[ trenutnaVeza ].w; brUvrstenih ++; uvrsteneveza[ trenutnaVeza ] = TRUE; } printf("%d\n", suma ); for ( int i = 1; i <= brVeza; i ++ ) if ( uvrsteneveza[ i ] ) printf("(%d,%d) %d\n", veza[ i ].u, veza[ i ].v, veza[ i ].w ); return 0; }