Pagini recente » Cod sursa (job #1428818) | Cod sursa (job #2193886) | Cod sursa (job #731133) | Cod sursa (job #862899) | Cod sursa (job #1504536)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin( "lazy.in" ); ofstream fout( "lazy.out" );
const int nmax = 200000;
int n, m;
int tata[ nmax + 1 ], grad[ nmax + 1 ];
struct muchie{
int x, y, ind;
long long c1, c2;
inline bool operator < ( const muchie &a ) const {
if ( c1 != a.c1 ) {
return ( c1 < a.c1 );
}
return ( c2 > a.c2 );
}
} v[ nmax + 1 ];
int find_tata( int x ) {
if ( x == tata[ x ] ) {
return x;
}
return ( tata[ x ] = find_tata( tata[ x ] ) );
}
void kruskal() {
sort( v, v + m );
for( int i = 0; i < m; ++ i ) {
int ta = find_tata( v[ i ].x ), tb = find_tata( v[ i ].y );
if ( ta != tb ) {
if ( grad[ ta ] > grad[ tb ] ) {
grad[ ta ] += grad[ tb ];
tata[ tb ] = ta;
} else {
grad[ tb ] += grad[ ta ];
tata[ ta ] = tb;
}
fout << v[ i ].ind << "\n";
}
}
}
int main() {
fin >> n >> m;
for( int i = 0; i < m; ++ i ) {
fin >> v[ i ].x >> v[ i ].y >> v[ i ].c1 >> v[ i ].c2;
v[ i ].ind = i + 1;
}
for( int i = 1; i <= n; ++ i ) {
tata[ i ] = i;
grad[ i ] = 1;
}
kruskal();
fin.close();
fout.close();
return 0;
}