Cod sursa(job #2028239)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 27 septembrie 2017 15:44:23
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 200002

using namespace std;

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

int n, m, t[DIM];

vector <int> sol;

struct graful
{
    int x, y, i;
    long long c1, c2;
}graf[DIM];

bool cmp(graful a, graful b)
{
    if(a.c1 == b.c1)
        return a.c2 > b.c2;
    return a.c1 < b.c1;
}

int rad(int x)
{
    while(t[x] > 0)
        x = t[x];
    return x;
}

void calc(int rx, int ry)
{
    if(t[rx] < t[ry])
    {
        t[rx] += t[ry];
        t[ry] = rx;
    }
    else
    {
        t[ry] += t[rx];
        t[rx] = ry;
    }
}

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

int main()
{
    f>>n>>m;
    for(int i = 1; i <= m; ++ i)
    {
        f>>graf[i].x>>graf[i].y>>graf[i].c1>>graf[i].c2;
        graf[i].i = i;
    }

    for(int i = 1;i <= n; ++ i)
        t[i] = -1;

    sort(graf + 1, graf + m + 1, cmp);

    for(int i = 1; i <= m; ++ i)
    {
        int rx = rad(graf[i].x);
        int ry = rad(graf[i].y);
        if(rx != ry)
        {
            calc(rx, ry);
            sol.push_back(graf[i].i);
        }
    }

    afis();

    return 0;
}