Cod sursa(job #1321261)

Utilizator AlexbiraianuBiraianu Alex Valentin Alexbiraianu Data 18 ianuarie 2015 22:08:34
Problema Diamant Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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;
            }
        }
    }
}