Cod sursa(job #530355)

Utilizator loginLogin Iustin Anca login Data 7 februarie 2011 17:13:30
Problema PScNv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include <fstream>
# include <vector>
# include <set>
# define DIM 250003
# define pb push_back
# define mp make_pair
using namespace std;
int n, m, ss, dd;
short int v[DIM], s[DIM], d[DIM];
vector< pair<int,short int> > G[DIM];
set< pair<short int, int> >S;

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

void prim ()
{
	for(int i=1;i<=n;++i)
		d[i]=1<<10;
	d[ss]=0;
	S.insert(mp(0,ss));
	int k, c;
	while (S.size())
	{
		k=(*S.begin()).second;c=(*S.begin()).first;S.erase(S.begin());
		if (!v[k])
		{
			v[k]=1;
			if (k==dd)return;
			for(unsigned i=0;i<G[k].size();++i)
				if (!v[G[k][i].first] && (s[k]>=G[k][i].second || d[G[k][i].first]>G[k][i].second))
				{
					d[G[k][i].first]=G[k][i].second;
					if (s[k]>G[k][i].second)s[G[k][i].first]=s[k];
					else s[G[k][i].first]=G[k][i].second;
					S.insert(mp(G[k][i].second,G[k][i].first));
				}
		}
	}
}

int main ()
{
	read ();
	prim ();
	ofstream fout ("pscnv.out");
	fout<<s[dd];
	return 0;
}