Cod sursa(job #544885)

Utilizator siminescuPaval Cristi Onisim siminescu Data 2 martie 2011 12:54:24
Problema Lazy Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<algorithm>
using namespace std;

ifstream f("lazy.in");
ofstream g("lazy.out");

# define nmax 200002
typedef struct muchii{
	int nr,x,y;
	long long c1,c2;
};
muchii m[nmax];
int N,M,t[nmax];

void citire()
{
	f>>N>>M;
	int i;
	for(i=1;i<=M;++i)
		m[i].nr=i, f>>m[i].x>>m[i].y>>m[i].c1>>m[i].c2, t[i]=i;
}
int cmp(muchii a,muchii b)
{
	if(a.c1+a.c2==b.c1+b.c2)
		return a.c2>b.c2;
	return a.c1<b.c1;
}
int tata(int i)
{
	int p,q;
	p=i;
	while(t[i]!=i) i=t[i];
	while(t[p]!=i) q=p, p=t[p], t[q]=i;
	return i;
}
int main()
{
	citire();
	sort(m+1,m+M+1,cmp);
	int i,p;
	//for(i=1;i<=M;++i) g<<m[i].nr<<' ';
	for(i=1;i<=M;++i)
		if(tata(m[i].x)!=tata(m[i].y))
		{
			g<<m[i].nr<<'\n';
			p=t[m[i].y];
			t[p]=t[m[i].x];
		}
}