Cod sursa(job #544542)

Utilizator freak93Adrian Budau freak93 Data 1 martie 2011 19:35:21
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <algorithm>

using namespace std;

const char iname[] = "lazy.in";
const char oname[] = "lazy.out";
const int maxn = 200005;

ifstream f(iname);
ofstream g(oname);

int A[maxn], p[maxn], x[maxn], y[maxn], i, n, m;
long long c[maxn], pr[maxn];

inline int anc(int x) {
	int y, aux;
	for (y = x; y != A[y]; y = A[y]);
	for (; x != y; x = aux)
		aux = A[x], A[x] = y;
	return y;
}

inline void merge(int x, int y) {
	A[x] = y;
}

bool fcomp(int a, int b) {
	if (c[a] != c[b])
		return c[a] < c[b];
	return pr[a] > pr[b];
}

int main() {
	f >> n >> m;
	for (i = 1; i <= m; ++i)
		f >> x[i] >> y[i] >> c[i] >> pr[i], p[i] = i;
	sort (p + 1, p + m + 1, fcomp);
	for (i = 1; i <= n; ++i)
		A[i] = i;
	
	for (i = 1; i <= m; ++i)
		if (anc(x[p[i]]) != anc(y[p[i]]))
			merge(anc(x[p[i]]), anc(y[p[i]])), g << p[i] << "\n";
}