Cod sursa(job #970359)

Utilizator superman_01Avramescu Cristian superman_01 Data 6 iulie 2013 17:58:35
Problema Lazy Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream>
#include<algorithm>
#include<vector>
 
#define NMAX 200005
 
using namespace std;
 
ifstream f("lazy.in");
ofstream g("lazy.out");
 
 
struct GRAPH
{
	long long c1,c2;
    int n1,n2,nr;
}v[NMAX];
 
vector < int > Sol;
int N,M;
int TT[NMAX];
 
inline bool cmp ( GRAPH A , GRAPH B )
{
    if( A.c1 == B.c1 )
        return A.c2>B.c2;
    return A.c1<B.c1;
}
int Find ( int x )
{
    int R;
    for(R=TT[x];R!=TT[R];R=TT[R]);
    return R;
}
int main ( void )
{
    f>>N>>M;
    for( int i(1) ; i <= M ; ++ i )
    {
        f>>v[i].n1>>v[i].n2>>v[i].c1>>v[i].c2;
        v[i].nr=i;
    }
    for( int i(1) ; i <= N ; ++i )
        TT[i]=i;
    f.close();
    sort ( v + 1 , v+ M +1 , cmp);
    for( int i(1) ; i <= M ; ++i )
    {
        int x,y;
        x=Find(v[i].n1);
        y=Find(v[i].n2);
        if( x != y )
        {
            Sol.push_back(v[i].nr);
            TT[y]=x;
        }
    }
	sort(Sol.begin(),Sol.end());
    for( int i(0) ; ( unsigned int ) i < Sol.size() ; ++i  )
        g<<Sol[i]<<"\n";
    g.close();
    return 0;
}