Cod sursa(job #2029434)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 30 septembrie 2017 09:20:34
Problema Lazy Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<iostream>
#include<fstream>
#include<algorithm>

using namespace std;
ifstream fin("lazy.in");
ofstream fout("lazy.out");
long long m, el, i, f[200002],c,a,b,j,auxa,auxb ,nr;
long long sum;
pair <pair <long long, long long> , pair< int, int> > v[400002];
int z[400002], h[400002];

int calc(int nod)
{
    int aux=nod, a;
    while(f[nod]>0)
        nod=f[nod];
    while(f[aux]>0)
    {
        a=aux;
        aux=f[aux];
        f[a]=aux;
    }
    return nod;
}

int main(){
    fin>>el>>m;
    for(i=1;i<=el;i++)
        f[i]=-1;
    for(i=1;i<=m;i++)
    {
        fin>>v[i].second.first>>v[i].second.second>>v[i].first.first>>v[i].first.second;
        v[i].first.second*=v[i].first.first;
        h[i]=i;
    }
    sort(v+1, v+1+m);
    for(i=1;i<=m;i++)
    {
        a=v[i].second.first;
        b=v[i].second.second;
        auxa=calc(a);
        auxb=calc(b);
        if(auxa!=auxb)
        {
            if(f[auxa]<f[auxb])
            {
                f[auxa]+=f[auxb];
                f[auxb]=auxa;
            }
            else
            {
                f[auxb]+=f[auxa];
                f[auxa]=auxb;
            }
            nr++;
            z[nr]=h[i];
        }
    }
    for(i=1;i<=nr;i++)
        fout<<z[i]<<"\n";
    fin.close();
    fout.close();
    return 0;
}