Pagini recente » Cod sursa (job #1718248) | Cod sursa (job #59943) | Cod sursa (job #717743) | Cod sursa (job #2944580) | Cod sursa (job #2020464)
#include<bits/stdc++.h>
#define STIZE(x) fprintf(stderr, "STIZE%d\n", x);
#define PRINT(x) fprintf(stderr, "%s = %d\n", #x, x);
#define NL(x) printf("%c", " \n"[(x)]);
#define lld long long
#define pii pair<int,int>
#define pb push_back
#define fi first
#define se second
#define all(a) begin(a),end(a)
#define sz(a) int((a).size())
#define LINF 1000000000000000
#define INF 1000000000
#define EPS 1e-9
using namespace std;
#define MAXN 200010
int n, m;
struct Edge{
int x, y, idx;
lld c1, c2;
};
vector<Edge> E;
bool cmp(Edge a, Edge b) {
if(a.c1 != b.c1) return a.c1 < b.c1;
return a.c2 > b.c2;
}
int dsu[MAXN];
int root(int a) {
while(dsu[a] != a) {
dsu[a] = dsu[dsu[a]];
a = dsu[a];
}
return a;
}
void connect(int x, int y) {
dsu[root(x)] = root(y);
}
void Kruskal() {
for(int i = 1; i < MAXN; i++) dsu[i] = i;
for(auto e : E) {
if(root(e.x) != root(e.y)) {
connect(e.x, e.y);
printf("%d\n", e.idx);
}
}
}
int main() {
freopen("lazy.in", "r", stdin);
freopen("lazy.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++) {
Edge e; scanf("%d%d%lld%lld", &e.x, &e.y, &e.c1, &e.c2);
e.idx = i;
E.pb(e);
}
sort(all(E), cmp);
Kruskal();
return 0;
}