Cod sursa(job #970353)

Utilizator superman_01Avramescu Cristian superman_01 Data 6 iulie 2013 17:54:46
Problema Lazy Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<algorithm>
#include<vector>

#define NMAX 200005

using namespace std;

ifstream f("lazy.in");
ofstream g("lazy.out");


struct GRAPH
{
	int n1,n2,c1,c2,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;
		}
	}
	for( vector < int > :: iterator it = Sol.begin() ; it != Sol.end() ; ++it )
		g<<*it<<"\n";
	g.close();
	return 0;
}