Cod sursa(job #530352)

Utilizator loginLogin Iustin Anca login Data 7 februarie 2011 16:45:42
Problema PScNv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
# include <fstream>
# include <vector>
# include <queue>
# define DIM 250003
using namespace std;
int n, m, S, D, kmin=DIM, v[DIM];
vector< pair<int,short int> > G[DIM];
queue<int>Q;

void read ()
{
	ifstream fin ("pscnv.in");
	fin>>n>>m>>S>>D;
	int x, y, k;
	for(int i=1;i<=m;++i)
	{
		fin>>x>>y>>k;
		if (x!=y)
			G[x].push_back(make_pair(y,k));
	}
}

bool ok (int K)
{
	while (Q.size())Q.pop();
	Q.push(S);
	int k;
	v[S]=K;
	while (Q.size())
	{
		k=Q.front();Q.pop();
		for(unsigned i=0;i<G[k].size();++i)
			if (v[G[k][i].first]!=K && G[k][i].second<=K)
			{
				if (G[k][i].first==D)
					return true;
				Q.push(G[k][i].first);
				v[G[k][i].first]=K;
			}
	}
	return false;
}

void find (int st, int dr)
{
	if (st==dr)
	{
		if (st<kmin && ok (st))
			kmin=st;
		return;
	}
	int mij=(st+dr)/2;
	if (ok(mij))
	{
		kmin=mij;
		find(st, mij);
	}
	else
		find (mij+1, dr);
}

int main ()
{
	read ();
	find (1, 1000);
	ofstream fout ("pscnv.out");
	fout<<kmin;
	return 0;
}