Cod sursa(job #795160)

Utilizator onisimgeorgescu cosmin onisim Data 7 octombrie 2012 17:38:19
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<cstdio>
#include<algorithm>
#define N 200001
using namespace std;
FILE *f,*g;
int i,n,m,u,v,x[N],y[N],gr[N],rang[N],ind[N];
long long c1[N],c2[N];

bool cmp(int a,int b)
{if(c1[a]<c1[b])
	return 1;
else
	if(c1[a]==c1[b])
		if(c2[a]>c2[b])
			return 1;
return 0;
}
int find(int x)
{if(gr[x]!=x)
	gr[x]=find(gr[x]);
return gr[x];
}
int main()
{f=fopen("lazy.in","r");
g=fopen("lazy.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;++i)
{fscanf(f,"%d%d%Ld%Ld",&x[i],&y[i],&c1[i],&c2[i]);
ind[i]=i;
}
sort(ind+1,ind+m+1,cmp);
for(i=1;i<=n;++i)
{gr[i]=i;
rang[i]=i;
}
for(i=1;i<=m;++i)
{u=find(x[ind[i]]);
v=find (y[ind[i]]);
if(u!=v)
{if(rang[u]<rang[v])
	gr[u]=v;
else
{rang[u]+=(rang[u]==rang[v]);
gr[v]=u;
}
fprintf(g,"%d\n",ind[i]);
}}
return 0;
}