Cod sursa(job #1504536)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 17 octombrie 2015 21:06:13
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#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;
}