Cod sursa(job #1306502)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 31 decembrie 2014 04:57:59
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("lazy.in");
ofstream fout("lazy.out");

struct data {
	int x;
	int y;
	long long z;
	long long c;
	int p;
} v[200010];

int n, m, rx, ry, dr;

int t[200010], sol[200010];

int rad(int x) {

	while (t[x]>0)
		x = t[x];
	return x;

}

bool cmp(const data &a, const data &b) {
	return (a.z != b.z ? a.z<b.z : a.c>b.c);
}

int main() {

	fin >> n >> m;

	for (int i = 1; i <= m; i++) {
		fin >> v[i].x >> v[i].y >> v[i].z >> v[i].c;
		v[i].p = i;
		t[i] = -1;
	}

	sort(v + 1, v + m + 1, cmp);

	for (int i = 1; i <= m; i++){

		rx = rad(v[i].x);
		ry = rad(v[i].y);


		if (rx != ry) {
			if (t[rx] < t[ry]) {
				t[rx] += t[ry];
				t[ry] = rx;
			}
			else {
				t[ry] += t[rx];
				t[rx] = ry;
			}

			sol[++dr] = v[i].p;

			if (dr == n - 1) {
				for (int j = 1; j < n; j++)
					fout << sol[j] << "\n";
				return 0;
			}
		}

	}
}