Cod sursa(job #903944)

Utilizator nutipasa16Macovei Claudiu nutipasa16 Data 3 martie 2013 14:34:52
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<queue>
#define Mmax 100025
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,x,y,s,us;
int abs(int a)
{
	if(a<0)
		return -a;
	else
		return 0;
}
struct seg
{
	int x,y,c;
}a[Mmax];
queue<seg> Q;
void verif_cresc(seg b)
{
	if(b.x>b.y)
		{
			int aux;
			aux=b.x;
			b.x=b.y;
			b.y=aux;
		}
}
void ordonare()
{
	for(int i=1;i<m;i++)
		for(int j=i+1;j<=m;j++)
			if(a[i].x>a[j].x)
			{
				seg aux;
				aux=a[i];
				a[i]=a[j];
				a[j]=aux;
			}
			else
				if(a[i].x==a[j].x)
					if(a[i].y>a[j].y)
					{
						seg aux;
						aux=a[i];
						a[i]=a[j];
						a[j]=aux;
					}
}
void formare()
{
	for(int i=1;i<m;i++)
		for(int j=i+1;j<=m && a[i].x==a[j].x;j++)
			if(a[i].x==a[j].x)
			{
				m++;
				a[m].x=a[i].y;
				a[m].y=a[j].y;
				a[m].c=abs(a[i].c-a[j].c);
				verif_cresc(a[m]);
				if(a[m].x==us)
				{
					us=a[m].y;
					s+=a[m].c;
				}
				ordonare();
			}
}
int main()
{
	f>>n>>m>>x>>y;
	for(int i=1;i<=m;i++)
	{
		f>>a[i].x>>a[i].y>>a[i].c;
		verif_cresc(a[i]);
	}
	ordonare();
	s+=a[1].c;
	us=a[1].y;
	formare();
	g<<s<<" ";
	return 0;
}