Pagini recente » Cod sursa (job #1361041) | Cod sursa (job #2631891) | Cod sursa (job #2334769) | Cod sursa (job #1129499) | Cod sursa (job #764896)
Cod sursa(job #764896)
#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];
bool cmp(int i,int j){
if(c1[IND[i]]<c1[IND[j]])return 1;
else if(c1[IND[i]]==c1[IND[j]] && c2[IND[i]]>c2[IND[j]])return 1;
else return 0;
}
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';
join( grupa( a[IND[i]] ) , grupa( b[IND[i]] ) );
}
return 0;
}