Pagini recente » Cod sursa (job #1940982) | Cod sursa (job #127911) | Cod sursa (job #1736229) | Cod sursa (job #1651756) | Cod sursa (job #1243262)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct L {
long a, b;
long C1, C2;
long i;
};
long N, M;
long p[200001], s[200001];//, e[200001], pf[200001];
long a, b, C1, C2;
vector<L> muchii;
long inline ha(long x) {
while(p[x] != x)
x = p[x];
return x;
}
void unite(long x, long y, long ef, long prof, long ind) {
x = ha(x);
y = ha(y);
if(x == y) {
return;
} else printf("%ld\n", ind);
if(s[x] > s[y]) {
p[y] = x;
//e[x] += ef + e[y];
//prof[x] += prof + pf[y];
} else if(s[x] == s[y]) {
p[y] = x;
s[x]++;
//e[x] += ef + e[y];
} else {
p[x] = y;
//e[y] += ef + e[x];
}
}
bool cmp(L a, L b) {
if(a.C1 == b.C1)
//if(a.C2 == b.C2)
// return a.i < b.i;
/*else*/ return a.C2 < b.C2;
else return a.C1 < b.C1;
}
int main() {
long i, j;
L tmp;
freopen("lazy.in", "r", stdin);
freopen("lazy.out", "w", stdout);
scanf("%ld %ld", &N, &M);
for(i = 1; i <= N; i++) {
p[i] = i;
s[i] = 1;
//e[i] = pf[i] = 0;
}
for(i = 1; i <= M; i++) {
scanf("%ld %ld %ld %ld", &a, &b, &C1, &C2);
tmp.a = a;
tmp.b = b;
tmp.C1 = C1;
tmp.C2 = C2;
tmp.i = i;
muchii.push_back(tmp);
}
sort(muchii.begin(), muchii.end(), cmp);
for(i = 0; i < M; i++)
unite(muchii[i].a, muchii[i].b, muchii[i].C1, muchii[i].C2, muchii[i].i);
//i = ha(1);
//printf("%ld\n%ld\n", e[i], pf[i]);
return 0;
}