Pagini recente » Cod sursa (job #729850) | Cod sursa (job #2094762) | Cod sursa (job #1939378) | Cod sursa (job #1044322) | Cod sursa (job #544542)
Cod sursa(job #544542)
#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";
}