Pagini recente » Cod sursa (job #1327331) | Cod sursa (job #3152124) | Cod sursa (job #2671009) | Cod sursa (job #2233751) | Cod sursa (job #544940)
Cod sursa(job #544940)
// 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);
void kruskal();
void unite(int first,int second);
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;
}
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)) {
unite(findAndUpdate(edge[Link[i]].from),findAndUpdate(edge[Link[i]].to));
out << Link[i] << "\n";
}
return (0);
}
void kruskal() {
}
void unite(int first,int second) {
group[first] = second;
}
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;
}