Cod sursa(job #764896)

Utilizator ion824Ion Ureche ion824 Data 6 iulie 2012 17:19:38
Problema Lazy Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 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];

bool cmp(int i,int j){
     if(c1[IND[i]]<c1[IND[j]])return 1;
       else if(c1[IND[i]]==c1[IND[j]] && c2[IND[i]]>c2[IND[j]])return 1;
        else return 0;
        }

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';          
        join( grupa( a[IND[i]] ) , grupa( b[IND[i]] ) );           
       }    
 return 0;   
}