Pagini recente » Cod sursa (job #225285) | Cod sursa (job #3233808) | Cod sursa (job #2302162) | Cod sursa (job #3130723) | Cod sursa (job #970363)
Cod sursa(job #970363)
#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,y;
for(R=TT[x];R!=TT[R];R=TT[R]);
for ( ; TT[x] != x ; )
{
y=TT[x];
TT[x]=R;
x=y;
}
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;
}