Cod sursa(job #543797)

Utilizator loginLogin Iustin Anca login Data 28 februarie 2011 16:42:56
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
# include <fstream>
# include <algorithm>
# define DIM 200003
using namespace std;
struct nod{
	long long c1, c, a, b, i;
	nod(){}
	nod(long long X,long long Y, long long I, long long C1, long long C){
		a=X;b=Y;i=I;c1=C1;c=C;}
	friend bool operator < (const nod &a, const nod &b){
		if (a.c1<b.c1)return 1;
		if (a.c1==b.c1 && a.c>b.c)return 1;
		if (a.c1==b.c1 && a.c==b.c && a.a<b.a)return 1;
		if (a.c1==b.c1 && a.c==b.c && a.a==b.a && a.b<b.b)return 1;
		if (a.c1==b.c1 && a.c==b.c && a.a==b.a && a.b==b.b && a.i<b.i)return 1;		
		return 0;
	}
};
int n, m, t[DIM], s[DIM];
nod v[DIM];

void read ()
{
	ifstream fin ("lazy.in");
	fin>>n>>m;
	long long c, d, a, b;
	for(int i=1;i<=m;++i)
	{
		fin>>a>>b>>c>>d;
		v[i]=nod(a, b, i, c, d);
	}
}

long long rad (long long k)
{
	long long y=k, i;
	while (t[k])
		k=t[k];
	while (t[y])
	{
		i=y;
		y=t[y];
		t[i]=k;
	}
	return k;
}
		
void solve ()
{
	sort(v+1, v+m+1);
	long long ra, rb;
	for(int i=1, nt=1;nt<n && i<=m;++i)
	{
		ra=rad(v[i].a);
		rb=rad(v[i].b);
		if (ra!=rb)
		{
			t[ra]=rb;
			s[nt]=v[i].i;
			++nt;
		}
	}
}

int main ()
{
	read ();
	solve ();
	freopen("lazy.out", "w", stdout);
	for(int i=1;i<n;++i)
		printf("%d\n", s[i]);
	return 0;
}