Pagini recente » Cod sursa (job #1351377) | Cod sursa (job #1322357) | Cod sursa (job #2586411) | Monitorul de evaluare | Cod sursa (job #2651251)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("lazy.in");
ofstream fout("lazy.out");
long long n,m,i,j,x,y,tx,ty,t[200001];
vector <int> s;
struct edge{
long long x;
long long y;
long long c1;
long long c2;
int ind;
} v[200001];
bool cmp(edge a, edge b){
if(a.c1 != b.c1)
return a.c1<a.c2;
return a.c1*a.c2 > b.c1*b.c2;
}
long long rad(int x){
while(t[x]>=0)
x=t[x];
return x;
}
int main(){
fin>>n>>m;
for(i=1;i<=n;i++)
t[i]=-1;
for(i=1;i<=m;i++){
fin>>v[i].x>>v[i].y>>v[i].c1>>v[i].c2;
v[i].ind=i;
}
sort(v+1,v+m+1,cmp);
for(i=1;i<=m;i++){
x=v[i].x; tx=rad(x);
y=v[i].y; ty=rad(y);
if(tx==ty)
continue;
s.push_back(v[i].ind);
if(t[tx]<t[ty]){
t[tx]+=t[ty];
t[ty]=tx;
}else{
t[ty]+=t[tx];
t[tx]=ty;
}
}
sort(s.begin(),s.end());
for(i=0;i<n-1;i++)
fout<<s[i]<<"\n";
return 0;
}