Cod sursa(job #543776)

Utilizator loginLogin Iustin Anca login Data 28 februarie 2011 16:28:15
Problema Lazy Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
# include <fstream>
# include <vector>
# include <set>
# include <algorithm>
# include <cmath>
# define DIM 200003
# define pb push_back
# define mp make_pair
using namespace std;
struct nod{
	int a, b, i;
	long long c1;
	double c;
	nod(){}
	nod(int X, int Y, int I, long long C1, double 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;
		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, log(c)+log(d));
	}
}

int rad (int k)
{
	int 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);
	int ra, rb;
	for(int i=1;s[0]<n-1;++i)
	{
		ra=rad(v[i].a);
		rb=rad(v[i].b);
		if (ra!=rb)
		{
			t[ra]=rb;
			s[++s[0]]=v[i].i;
		}
	}
}

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