Pagini recente » Cod sursa (job #2391529) | Cod sursa (job #2717600) | Cod sursa (job #2044593) | Cod sursa (job #444560) | Cod sursa (job #764900)
Cod sursa(job #764900)
#include<fstream>
#include<algorithm>
#define NM 200005
using namespace std;
int GR[NM],IND[NM],a[NM],b[NM],N,M;
long long c1[NM],c2[NM];
struct cmp{
bool operator()(const int &a,const int &b)
{
if(c1[a]==c1[b])return c2[a]>c2[b];
else return c1[a]<c1[b];
}
};
int grupa(int i){
if(GR[i]==i)return i;
GR[i]=grupa(GR[i]);
return GR[i];
}
void join(int i,int j){
GR[i]=grupa(j);
}
int main(void){
ifstream fin("lazy.in");
ofstream fout("lazy.out");
int i,k=0;
fin>>N>>M;
for(i=1;i<=N;++i)GR[i]=i;
for(i=1;i<=M;++i)
{
fin>>a[i]>>b[i]>>c1[i]>>c2[i];
IND[i]=i;
}
sort(IND+1,IND+M+1,cmp());
for(i=1;i<=M && k<(N-1);++i)
if(grupa(a[IND[i]])!=grupa(b[IND[i]]))
{
++k;
fout<<IND[i]<<'\n';
GR[ grupa( a[IND[i]] )] = grupa( b[IND[i]] ) ;
}
return 0;
}