Cod sursa(job #544947)

Utilizator feelshiftFeelshift feelshift Data 2 martie 2011 14:43:40
Problema Lazy Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
// http://infoarena.ro/problema/lazy
#include <fstream>
#include <algorithm>
using namespace std;

#define maxSize 200001

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

struct stuff {
    int from,to;
    int length,profit;
};

int nodes,nrEdges;
int group[maxSize];
int Link[maxSize];
stuff edge[maxSize];

void read();
bool comp(int i,int k);
int findAndUpdate(int node);
void write();

int main() {
    in >> nodes >> nrEdges;

    for(int i=1;i<=nrEdges;i++) {
        in >> edge[i].from >> edge[i].to;
        in >> edge[i].length >> edge[i].profit;

        edge[i].profit *= edge[i].length;

        Link[i] = i;
    }

    for(int i=1;i<=nodes;i++)
        group[i] = i;

    sort(Link+1,Link+nrEdges+1,comp);

    for(int i=1;i<nodes;i++)
        if(findAndUpdate(edge[Link[i]].from) != findAndUpdate(edge[Link[i]].to)) {
            group[findAndUpdate(edge[Link[i]].from)] = findAndUpdate(edge[Link[i]].to);

            out << Link[i] << "\n";
        }

    return (0);
}

void kruskal() {
}

int findAndUpdate(int node) {
    if(group[node] == node)
        return node;
    else {
        group[node] = findAndUpdate(group[node]);
        return group[node];
    }
}

bool comp(int i,int k) {
    if(edge[i].length < edge[k].length)
        return true;
    else
        if(edge[i].length <= edge[k].length && edge[i].profit > edge[k].profit)
            return true;
        else
            return false;

}