Cod sursa(job #2651280)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 21 septembrie 2020 23:20:25
Problema Lazy Scor 80
Compilator cpp-64 Status done
Runda apmtraining Marime 1.27 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

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

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

struct edge{
    int x;
    int 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<b.c1;

    return a.c2 > b.c2;
}

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

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

    long long x=1000000000;

    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].c2*=v[i].c1;
        v[i].ind=i;
    }
    sort(v+1,v+m+1,cmp);

    for(i=1;i<=m;i++)
        cout<<v[i].x<<" "<<v[i].y<<" "<<v[i].c1<<" "<<v[i].c2<<"\n";

    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;
}