Pagini recente » Cod sursa (job #1250403) | Cod sursa (job #1534809) | Cod sursa (job #2755048) | Cod sursa (job #750133) | Cod sursa (job #2028860)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("lazy.in");
ofstream fout ("lazy.out");
struct elem {
int x, y, i;
long long c1, c2;
} v[200001];
int m, n, T[200001], sol[200001], 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;
}