Pagini recente » Cod sursa (job #2711952) | Istoria paginii runda/2010_1 | Cod sursa (job #1279561) | Istoria paginii utilizator/foroji2019 | Cod sursa (job #544979)
Cod sursa(job #544979)
// http://infoarena.ro/problema/lazy
#include <fstream>
#include <algorithm>
using namespace std;
#define maxSize 200002
ifstream in("lazy.in");
ofstream out("lazy.out");
struct stuff {
int from,to;
long long length,profit;
};
int nodes,nrEdges;
int group[maxSize];
int Link[maxSize];
stuff edge[maxSize];
bool comp(int i,int k);
int root(int node);
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;
// profitul este direct
// proportional cu lungimea muchiei
//edge[i].profit *= edge[i].length;
Link[i] = i;
}
sort(Link+1,Link+nrEdges+1,comp);
for(int i=1;i<=nodes;i++)
group[i] = i;
int usedEdges = 0;
for(int i=1;i<=nrEdges;i++)
if(root(edge[Link[i]].from) != root(edge[Link[i]].to)) {
group[ root(edge[Link[i]].from) ] = root(edge[Link[i]].to);
out << Link[i] << "\n";
//if(++usedEdges == nodes - 1)
// break;
}
in.close();
out.close();
return (0);
}
bool comp(int i,int k) {
if(edge[i].length != edge[k].length)
return (edge[i].length < edge[k].length);
else
return (edge[i].profit > edge[k].profit);
}
int root(int node) {
if(group[node] == node)
return node;
else {
group[node] = root(group[node]);
return group[node];
}
}