Pagini recente » test_11 | Cod sursa (job #2983207) | Cod sursa (job #336574) | Cod sursa (job #2277636) | Cod sursa (job #644025)
Cod sursa(job #644025)
#include <cstdio>
#include <algorithm>
using namespace std;
#define file_in "lazy.in"
#define file_out "lazy.out"
#define nmax 201001
int N,M,i;
int x[nmax];
int y[nmax];
long long c[nmax];
long long p[nmax];
int sol[nmax];
int nr=0;
int c1,c2,t1,t2;
int tata[nmax];
int ind[nmax];
int cmp(int a, int b) {
if (c[a]==c[b])
return (p[a]>p[b]);
return (c[a]<c[b]);
}
int find(int x){
if (x!=tata[x])
tata[x]=find(tata[x]);
return tata[x];
}
void unite(int i, int j) {
tata[i]=j;
}
#define D 8192
char g_buf[D];
int g_p=D-1;
inline long long get()
{
long long x=0,neg;
while ((g_buf[g_p]<'0' || g_buf[g_p]>'9') && g_buf[g_p]!='-')
if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
neg=0;
if(g_buf[g_p]=='-'){ neg=1;
if(++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
}
while (g_buf[g_p]>='0' && g_buf[g_p]<='9'){
x=x*10+g_buf[g_p]-'0';
if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
}
if (neg) x=-x;
return x;
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
//scanf("%d %d", &N, &M);
N=get();
M=get();
for (i=1;i<=M;++i){
ind[i]=i;
tata[i]=i;
x[i]=get();
y[i]=get();
c[i]=get();
p[i]=get();
//scanf("%d %d %lld %lld", &x[i], &y[i], &c[i], &p[i]);
}
sort(ind+1,ind+M+1,cmp);
for (i=1;i<=M;++i){
t1=find(x[ind[i]]);
t2=find(y[ind[i]]);
if (t1!=t2){
unite(t1,t2);
sol[++nr]=ind[i];
}
}
for (i=1;i<N;++i)
printf("%d\n", sol[i]);
return 0;
}