Cod sursa(job #549073)

Utilizator cristiprgPrigoana Cristian cristiprg Data 8 martie 2011 09:50:21
Problema Lazy Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long
#define DIM 200002
struct muchie
{
	int u, v, index;
	long long c1, c2;
	bool friend operator <(const muchie &a, const muchie &b)
	{
		if (a.c1 < b.c1)
			return true;
		else
			if (a.c1 == b.c1 && a.c2 > b.c2)
				return true;
		return false;
	}
}muchii[DIM];

int n,m, t[DIM];

void read()
{
	FILE *f = fopen("lazy.in", "r");
	fscanf(f, "%d%d", &n, &m);
	int u, v;
	ll c1, c2;
	for(int i = 1; i <= m; ++i)
	{
		fscanf(f, "%d%d%lld%lld", &u, &v, &c1, &c2);
		muchii[i].u = u;
		muchii[i].v = v;
		muchii[i].index = i;
		muchii[i].c1 = c1;
		muchii[i].c2 = c2;
	}
	fclose(f);
}

int rad(int i)
{
	if (t[i] != i)
		t[i] = rad(t[i]);
	return i;
	
	
}

void kruskal()
{
	for (int i = 1; i <= n; ++i)	t[i] = i;
	sort(muchii+1, muchii+1+m);
	FILE *f = fopen("lazy.out", "w");
	for (int i = 1, nr = 0; i <= m && nr != (n-1); ++i)
	{
		int r1 = rad(muchii[i].u), r2 = rad(muchii[i].v);
	//	printf("%d %d %lld %lld\n", muchii[i].u, muchii[i].v, muchii[i].c1, muchii[i].c2);
		if (r1 != r2)//muchie in apm
		{
			t[r1] =r2;
			fprintf(f, "%d\n", muchii[i].index);
			++nr;
		}
	}
//	for (int i = 1; i <= n; ++i)
//		printf("%d ", t[i]);
	fclose(f);
}

int main()
{
	read();
	kruskal();
	
	return 0;
}