Pagini recente » Cod sursa (job #1700183) | Cod sursa (job #2028238) | Cod sursa (job #2867553) | Cod sursa (job #2391040) | Cod sursa (job #541418)
Cod sursa(job #541418)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define DM 200005
using namespace std;
int n,m,
x[DM],y[DM],ind[DM],c1[DM],c2[DM],gr[DM];
vector<int> sol;
bool cmp(int i, int j) {
if(c1[i]==c1[j]) return c2[i]-c1[i]*c2[i]<c2[j]-c1[j]*c2[j];
return c1[i]<c1[j];
}
int gaseste(int i) {
if(gr[i]==i) return i;
gr[i]=gaseste(gr[i]);
return gr[i];
}
void reuniune(int i,int j) {
gr[gaseste(i)]=gaseste(j);
}
int main()
{
ifstream f("lazy.in");
ofstream g("lazy.out");
f>>n>>m;
for(int i=1; i<=m; ++i) {
f>>x[i]>>y[i]>>c1[i]>>c2[i];
ind[i]=i;
}
for(int i=1; i<=n; ++i) gr[i]=i;
sort(ind+1,ind+m+1,cmp);
for(int i=1; i<=m; ++i) {
if(gaseste(x[ind[i]])!=gaseste(y[ind[i]])) {
reuniune(x[ind[i]],y[ind[i]]);
sol.push_back(ind[i]);
}
}
for(int i=0; i<n-1; ++i) g<<sol[i]<<'\n';
return 0;
}