Cod sursa(job #1919032)

Utilizator HD650Stoicescu Adrian Nicolae HD650 Data 9 martie 2017 17:43:46
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#define dim 200001
#include<algorithm>
using namespace std;


ifstream f("lazy.in");
ofstream g("lazy.out");
int T[dim],x[dim],y[dim],I[dim],n,m;
long long pr[dim],cost[dim];
inline int tata(int x)
{
    if(T[x]==x)
        return x;
    T[x]=tata(T[x]);

    return T[x];
}
/*
int T[dim],x[dim],y[dim],I[dim],n,m;
long long pr[dim],cost[dim];
inline int tata(int x)
{
    if(T[x]==x)
        return x;
    T[x]=tata(T[x]);

    return T[x];
}
*/
struct cmp
{
    bool operator() (const int &a, const int &b)const
    {
        if (cost[a]==cost[b])
            return pr[a]>pr[b];
        else
            return cost[a]<cost[b];
    }
};
void uni(int i,int j)
{

    T[tata(i)]=tata(j);
}
int main ()
{

    f>>n>>m;
    int a,b ;
    for(int i=1; i<=m; i++)
    {
        f>>x[i]>>y[i]>>cost[i]>>pr[i];
        I[i]=i;
    }
    for(int i=1; i<=n; i++)
        T[i]=i;

    sort(I+1,I+1+m,cmp());

    for(int i=1; i<=m; i++)
    {

        a=tata(x[I[i]]);
        b=tata(y[I[i]]);

        if(a!=b)
        {
            g<<I[i]<<"\n";
            uni(x[I[i]],y[I[i]]);

        }


    }
    return 0;
}