Cod sursa(job #549157)

Utilizator cristiprgPrigoana Cristian cristiprg Data 8 martie 2011 10:33:32
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 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 t[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);
		
		
		if (r1 != r2)//muchie in apm
		{
			t[r1] = r2;
			
			fprintf(f, "%d\n", muchii[i].index);
		
		}
	}

	fclose(f);
}

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