Nu aveti permisiuni pentru a descarca fisierul grader_test29.in

Cod sursa(job #2020463)

Utilizator MladenPMladen Puzic MladenP Data 10 septembrie 2017 13:51:07
Problema Light2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#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;
}