Cod sursa(job #764900)

Utilizator ion824Ion Ureche ion824 Data 6 iulie 2012 17:28:30
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<algorithm>
#define NM 200005
using namespace std;
int GR[NM],IND[NM],a[NM],b[NM],N,M;
long long c1[NM],c2[NM];

struct cmp{
     bool operator()(const int &a,const int &b)
     {
      if(c1[a]==c1[b])return c2[a]>c2[b];
                           else return c1[a]<c1[b];         
     }
};

int grupa(int i){
    if(GR[i]==i)return i;
    GR[i]=grupa(GR[i]);
    return GR[i];
}

void join(int i,int j){
     GR[i]=grupa(j);
}

int main(void){
    ifstream fin("lazy.in");
    ofstream fout("lazy.out");
    int i,k=0;
    fin>>N>>M;
    for(i=1;i<=N;++i)GR[i]=i;
    for(i=1;i<=M;++i)
     {
      fin>>a[i]>>b[i]>>c1[i]>>c2[i];
      IND[i]=i;
     }
    sort(IND+1,IND+M+1,cmp());
    for(i=1;i<=M && k<(N-1);++i)
      if(grupa(a[IND[i]])!=grupa(b[IND[i]]))
       {
        ++k;
        fout<<IND[i]<<'\n';          
        GR[ grupa( a[IND[i]] )] = grupa( b[IND[i]] ) ;           
       }    
 return 0;   
}