Cod sursa(job #741096)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 25 aprilie 2012 14:01:35
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<fstream>
#include<vector>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int n,m,X,Y,kmax;
struct Muchie{int nod,d;};
vector <int> G[250100],v[1010];
Muchie M[500100];
bool viz[250100];

inline void Citire()
{
	int i,poz,ns,x,y,d;
	char s[30];
	ifstream fin("pscnv.in");
	//fin>>n>>m>>X>>Y;
	fin.getline(s,30);
	ns=strlen(s);
	poz=0;
	while(s[poz]!=' ')
	{
		n=n*10+s[poz]-'0';
		poz++;
	}
	poz++;
	while(s[poz]!=' ')
	{
		m=m*10+s[poz]-'0';
		poz++;
	}
	poz++;
	while(s[poz]!=' ')
	{
		X=X*10+s[poz]-'0';
		poz++;
	}
	poz++;
	while(poz<ns)
	{
		Y=Y*10+s[poz]-'0';
		poz++;
	}
	//
	for(i=1;i<=m;i++)
	{
		//fin>>M[i].nod1>>M[i].nod2>>M[i].d;
		fin.getline(s,30);
		ns=strlen(s);
		poz=0;
		x=0;
		while(s[poz]!=' ')
		{
			x=x*10+s[poz]-'0';
			poz++;
		}
		poz++;
		y=0;
		while(s[poz]!=' ')
		{
			y=y*10+s[poz]-'0';
			poz++;
		}
		poz++;
		d=0;
		while(poz<ns)
		{
			d=d*10+s[poz]-'0';
			poz++;
		}
		//
		M[i].nod=y;
		M[i].d=d;
		G[x].push_back(i);
		kmax=max(kmax,d);
	}
	fin.close();
}

inline void Rezolvare()
{
	ofstream fout("pscnv.out");
	int i,x,nod,d;
	vector <int>::iterator it,jt;
	v[0].push_back(X);
	for(i=0;i<=kmax;i++)
	{
		for(it=v[i].begin();it!=v[i].end();it++)
		{
			if(*it==Y)
			{
				fout<<i<<"\n";
				fout.close();
				return;
			}
			if(!viz[*it])
			{
				viz[*it]=true;
				x=*it;
				for(jt=G[x].begin();jt!=G[x].end();jt++)
				{
					nod=M[*jt].nod;
					d=M[*jt].d;
					v[max(i,d)].push_back(nod);
				}
			}
		}
	}
}

int main()
{
	Citire();
	Rezolvare();
	return 0;
}