Cod sursa(job #541441)

Utilizator cdascaluDascalu Cristian cdascalu Data 25 februarie 2011 11:21:42
Problema Lazy Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 0.92 kb
#include<fstream>
#include<algorithm>
#define MAX 200001
using namespace std;
int car[MAX],n,m,sol[MAX];

struct muchie
{
	int x,y,a,poz;
	long long c,p;
}v[MAX];
int cmp(muchie a, muchie b)
{
	return (a.c<b.c || a.c == b.c && a.p>b.p);
}
int main()
{
	ifstream f("lazy.in");
	f>>n>>m;
	int i;
	for(i=1;i<=m;++i)
	{
		f>>v[i].x>>v[i].y>>v[i].c>>v[i].p;
		v[i].p -= v[i].c * v[i].p;
		v[i].poz = i;
	}
	f.close();
	
	sort(v+1, v+1+m, cmp);
	car[v[1].x] = car[v[1].y] = 1;
	v[1].a = 1;
	int cont,p;
	long long cost = v[1].c;
	sol[1] = v[1].poz;
	cont = 1;
	while(cont<n-1)
	{
		for(i=2;i<=m;++i)
		if((!car[v[i].x] || !car[v[i].y]) && (car[v[i].x] || car[v[i].y]))
		{
			p=i;
			i=m;
		}
		car[v[p].x] = car[v[p].y] = 1;
		v[p].a = 1;
		cost += v[p].c;
		++cont;
		sol[cont] = v[p].poz;
	}
	ofstream g("lazy.out");
	for(i=1;i<=n-1;++i)
		if(v[i].a)g<<sol[i]<<"\n";
	g.close();
	return 0;
}