Pagini recente » Cod sursa (job #2395807) | Cod sursa (job #3263219) | Cod sursa (job #2875255) | Cod sursa (job #565842) | Cod sursa (job #1676632)
#include <bits/stdc++.h>
const int DIM = 1 << 18;
using namespace std;
int Root[DIM], N, M;
struct edge{ int x, y, p; long long c1, c2; } Edge[DIM];
inline bool cmp( edge A, edge B ) {
return ( A.c1 == B.c2 ) ? ( A.c2 > B.c2 ) : ( A.c1 < B.c1 );
}
inline int get_root( int node ) {
return ( Root[node] < 0 ) ? node : get_root( Root[node] );
}
int main() {
FILE *input_file = fopen( "lazy.in" , "r" );
FILE *output_file = fopen( "lazy.out", "w" );
fscanf( input_file, "%d %d", &N, &M );
for( int i = 1; i <= M; i ++ ) {
fscanf( input_file, "%d %d", &Edge[i].x, &Edge[i].y );
fscanf( input_file, "%lld %lld", &Edge[i].c1, &Edge[i].c2 );
Edge[i].p = i;
}
sort( Edge + 1, Edge + M + 1, cmp );
memset( Root, -1, sizeof(Root) );
for( int i = 1; i <= M; i ++ ) {
int value1 = get_root( Edge[i].x );
int value2 = get_root( Edge[i].y );
if( value1 != value2 ) {
fprintf( output_file, "%d\n", Edge[i].p );
if( Root[value1] < Root[value2] ) {
Root[value1] += Root[value2];
Root[value2] = value1;
} else {
Root[value2] += Root[value1];
Root[value1] = value2;
}
}
}
return 0;
}