Cod sursa(job #2460951)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 24 septembrie 2019 18:49:36
Problema Lazy Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("lazy.in");
ofstream g ("lazy.out");

constexpr int NMAX = 2e5 + 5;

struct road
{
    int a, b;
    int poz;
    long long c1, c2;
};

road v[NMAX];
int rep[NMAX];

road nr;

vector <int> sol;

int n, m;

bool cmp (road a, road b)
{
    if (a.c1 > b.c1) return false;

    if (a.c1 == b.c1 && a.c2 < b.c2) return false;

    return true;
}

int Reprezentant (int node)
{
    if (rep[node] != node)
    {
        rep[node] = Reprezentant(rep[node]);
    }
    return rep[node];
}

int main()
{
    f >> n >> m;

    for (int i=1; i<=m; ++i)
    {
        f >> nr.a >> nr.b >> nr.c1 >> nr.c2;
        nr.poz = i;

        v[i] = nr;
    }

    sort(v+1, v+m+1, cmp);
    for (int i=1; i<=n; ++i)
        rep[i] = i;

    for (int i=1; i<=m; ++i)
    {
        int reprea = Reprezentant(v[i].a);
        int repreb = Reprezentant(v[i].b);

        if (reprea == repreb) continue;

        rep[reprea] = repreb;
        sol.push_back(v[i].poz);
    }

    for (int i=0; i<sol.size(); ++i)
        g << sol[i] << '\n';
    return 0;
}