Cod sursa(job #7190)

Utilizator DragoshZZabava Dragos DragoshZ Data 21 ianuarie 2007 13:00:59
Problema Radiatie Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.22 kb
#include<iostream.h>
#include<fstream.h>
#include<values.h>
fstream f("radiatie.in",ios::in);
fstream g("radiatie.out",ios::out);
int n,m,kk,as,ev,k,x[300],max;
float v[10][7]={0};

void init()
{ x[k]=-1;
}

int succesor()
{ if (x[k]<n&&k<=n)
	{x[k]++;return 1;}
	else
	return 0;
}

int valid()
{ if(k<=n)
	{ if (v[x[k-1]][x[k]]==0)
		return 0;
	  int i;
	    for(i=1;i<k;i++)
		if(x[i]==x[k])
			return 0;
	    return 1;
	}
  else
    return 0;
}

int solutie(int b,int &max)
{ max=0;
if (x[k]==b)
    { for(int i=2;i<=k;i++)
	if(v[x[i-1]][x[i]]>max)
		max=v[x[i-1]][x[i]];
     return 1;
    }
   else return 0;
}


void back(int a,int b)
{ k=2;
  x[1]=a;
  init();
  int min=MAXINT;
  while(k>1)
	{    do
		{  as=succesor();
		  if (as)
			ev=valid();
		}
	     while(as&&!ev);
	     if(as)
		if(solutie(b,max))
		       {if (min>max)
				min=max;}
		else
			{k++;init();}
	     else
	      k--;
	}
  g<<min<<endl;
}

struct nod{int a;int b;};
nod d[300];

int main()
{int i,a,b,c;
f>>n>>m>>kk;
for(i=1;i<=m;i++)
	{ f>>a>>b>>c;
	  v[a][b]=v[b][a]=c;
	}
for(i=1;i<=kk;i++)
	f>>d[i].a>>d[i].b;
for(i=1;i<=kk;i++)
	back(d[i].a,d[i].b);
f.close();
g.close();
return 0;}