Pagini recente » Cod sursa (job #2167037) | Cod sursa (job #1767575) | Cod sursa (job #766202) | Cod sursa (job #2859759) | Cod sursa (job #796583)
Cod sursa(job #796583)
//Vasilut
#include<fstream>
#include<cstdio>
#include<algorithm>
#define NN 200001
using namespace std;
ofstream out("lazy.out");
struct drumusor{
int x,y,nr;
long long c1,c2;
};
drumusor v[NN];
int T[NN],n,m,H[NN],k;
bool cmp(drumusor i,drumusor j)
{
return i.c1 < j.c1 || ( i.c1 == j.c1 && i.c2 > j.c2 ) ;
}
int cauta(int );
void unire(int ,int );
void read();
void kruskal();
const int maxb=200;
char buf[maxb];
int ptr=0;
inline int getint() {
int nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if (++ptr>=maxb) fread(buf,maxb,1,stdin),ptr=0;
while ('0'<=buf[ptr]&&buf[ptr]<='9') {
nr=nr*10 +buf[ptr]-'0';
if (++ptr>=maxb) fread(buf,maxb,1,stdin),ptr=0;
}
return nr;
}
inline long double getlong()
{
long double nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if (++ptr>=maxb) fread(buf,maxb,1,stdin),ptr=0;
while ('0'<=buf[ptr]&&buf[ptr]<='9') {
nr=nr*10*1LL +buf[ptr]-'0';
if (++ptr>=maxb) fread(buf,maxb,1,stdin),ptr=0;
}
return nr;
}
int main()
{
read();
kruskal();
return 0;
}
void read()
{
freopen("lazy.in","r",stdin);
n=getint();
m=getint();
for(int x,y,i=1;i<=m;i++)
{
if(i<=n)
T[i]=i;
long long c1,c2;
x=getint();
y=getint();
c1=getlong();
c2=getlong();
v[i].x=x;
v[i].y=y;
v[i].c1=c1;
v[i].c2=c2;
v[i].nr=i;
}
}
int cauta(int nod)
{
if( nod !=T[nod] )
T[nod]=cauta(T[nod]);
return T[nod];
}
void unire(int nod1,int nod2)
{
T[cauta(nod1)]=cauta(nod2);
}
void kruskal()
{
sort(v+1,v+m+1,cmp);
for(int i=1;i<=m;i++)
{
if( cauta(v[i].x ) != cauta(v[i].y) )
{
++k;
out<<v[i].nr<<" "<<'\n';
unire(v[i].x,v[i].y);
}
if ( k == n-1 )
return ;
}
}