Cod sursa(job #2651251)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 21 septembrie 2020 20:39:47
Problema Lazy Scor 0
Compilator cpp-64 Status done
Runda apmtraining Marime 1.12 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

ifstream fin("lazy.in");
ofstream fout("lazy.out");

long long n,m,i,j,x,y,tx,ty,t[200001];
vector <int> s;

struct edge{
    long long x;
    long long y;
    long long c1;
    long long c2;
    int ind;
} v[200001];

bool cmp(edge a, edge b){
    if(a.c1 != b.c1)
        return a.c1<a.c2;

    return a.c1*a.c2 > b.c1*b.c2;
}

long long rad(int x){
    while(t[x]>=0)
        x=t[x];
    return x;
}

int main(){
    fin>>n>>m;

    for(i=1;i<=n;i++)
        t[i]=-1;

    for(i=1;i<=m;i++){
        fin>>v[i].x>>v[i].y>>v[i].c1>>v[i].c2;
        v[i].ind=i;
    }
    sort(v+1,v+m+1,cmp);

    for(i=1;i<=m;i++){
        x=v[i].x; tx=rad(x);
        y=v[i].y; ty=rad(y);

        if(tx==ty)
            continue;

        s.push_back(v[i].ind);

        if(t[tx]<t[ty]){
            t[tx]+=t[ty];
            t[ty]=tx;
        }else{
            t[ty]+=t[tx];
            t[tx]=ty;
        }
    }

    sort(s.begin(),s.end());
    for(i=0;i<n-1;i++)
        fout<<s[i]<<"\n";

    return 0;
}