Pagini recente » Cod sursa (job #841326) | Cod sursa (job #860825) | Cod sursa (job #1166540) | Cod sursa (job #1071808) | Cod sursa (job #1248346)
/*
* Code by Spiromanul
*/
#include <fstream>
#include <algorithm>
#include <vector>
const char IN [ ] = "lazy.in" ;
const char OUT [ ] = "lazy.out" ;
const long long MAX = 200014 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
long long tata [ MAX ] , rang [ MAX ] ;
struct nationala {
long long a ; long long b ;
long long c1 , c2 ;
long long poz ;
void sett ( long long aaa , long long bbb , long long ccc , long long ddd , long long eee )
{
a = aaa ;
b = bbb ;
c1 = ccc ;
c2 = ddd ;
poz = eee ;
}
};
nationala q [ MAX ] ;
bool cmp ( nationala a , nationala b )
{
if ( a.c1 == b.c1 )
return a.c2 > b.c2 ;
return a.c1 < b.c1 ;
}
long long stramos ( long long nod )
{
long long R = nod ;
for ( ; tata [ R ] != R ; R = tata [ R ] ) ;
while ( nod != tata [ nod ] )
{
long long aux = tata [ nod ] ;
tata [ nod ] = R ;
nod = aux ;
}
return R ;
}
void uneste ( long long a , long long b )
{
if ( rang [ a ] < rang [ b ] )
swap ( a , b ) ;
tata [ b ] = a ;
rang [ a ] += rang [ b ] ;
}
int main( )
{
long long n , m ;
fin >> n >> m ;
for ( long long i = 1 ; i <= n ; ++ i )
{
tata [ i ] = i ;
rang [ i ] = 1 ;
}
for ( long long i = 1 ; i <= m ; ++ i )
{
long long a , b , c , d ;
fin >> a >> b >> c >> d ;
q [ i ].sett ( a , b , c , d , i ) ;
}
sort ( q + 1 , q + m + 1 , cmp ) ;
for ( long long i = 1 ; i <= m ; ++ i )
if ( stramos ( q [ i ].a ) != stramos ( q [ i ].b ) ){
uneste ( stramos ( q [ i ].a ) , stramos ( q [ i ].b ) ) ;
fout << q [ i ].poz << '\n' ;
}
return 0;
}