Cod sursa(job #2651341)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 22 septembrie 2020 12:26:47
Problema Lazy Scor 100
Compilator cpp-64 Status done
Runda apmtraining Marime 1.02 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define K 200002
using namespace std;
ifstream fin("lazy.in");
ofstream fout("lazy.out");
int n,m,i,j,x,y,rx,ry,q,t[K];
vector <int> sol;
struct str{
    int x,y,poz;
    long long c1,c2;
} v[K];
int cmp(str a,str b){
    if(a.c1==b.c1)
        return a.c2>b.c2;
    return a.c1<b.c1;
}
int rad(int x){
    while(t[x]>0)
        x=t[x];
    return x;
}
int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>v[i].x>>v[i].y>>v[i].c1>>v[i].c2;
        v[i].poz=i;
    }
    sort(v+1,v+m+1,cmp);
    for(i=1;i<=n;i++)
        t[i]=-1;
    for(i=1;i<=m && sol.size()<n;i++){
        rx=rad(v[i].x);
        ry=rad(v[i].y);
        if(rx==ry)continue;
        sol.push_back(v[i].poz);
        if(t[rx]<t[ry]){//rx are mai multe noduri
            t[rx]+=t[ry];
            t[ry]=rx;
        }
        else{
            t[ry]+=t[rx];
            t[rx]=ry;
        }
    }
    for(i=0;i<n-1;i++)
        fout<<sol[i]<<"\n";
    return 0;
}