Pagini recente » Cod sursa (job #555788) | Cod sursa (job #1389917) | Cod sursa (job #2740385) | Cod sursa (job #1075628) | Cod sursa (job #2028851)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("lazy.in");
ofstream fout ("lazy.out");
struct elem {
int x, y, i;
unsigned long long c1;
long long c2;
} v[200001];
int m, n, T[100001], sol[100001], k;
bool cmp (const elem a, const elem b) {
if (a.c1 != b.c1)
return a.c1 < b.c1;
return a.c2 * a.c1 > b.c2 * b.c1;
}
int rad (int x) {
while (T[x] > 0) {
x = T[x];
}
return x;
}
int main () {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
fin >> v[i].x >> v[i].y >> v[i].c1 >> v[i].c2;
v[i].i = i;
}
for (int i = 1; i <= n; i++)
T[i] = -1;
sort (v + 1, v + m + 1, cmp);
for (int i = 1; i <= m; i++) {
int radx, rady;
radx = rad (v[i].x);
rady = rad (v[i].y);
if (radx == rady)
continue;
if (T[radx] < T[rady]) {
T[radx] += T[rady];
T[rady] = radx;
}
else {
T[rady] += T[radx];
T[radx] = rady;
}
sol[++k] = v[i].i;
}
for (int i = 1; i <= k; i++) {
fout << sol[i] << "\n";
}
return 0;
}