比赛 20110916 评测结果 RRRRRRRRRR
题目名称 硬币 最终得分 0
用户昵称 donny 运行时间 0.003 s
代码语言 C++ 内存使用 0.66 MiB
提交时间 2011-09-16 20:10:27
显示代码纯文本
#include <iostream>
#include <fstream>

using namespace std;

int i,j,k,l;
long n,p,c,f,s,d;
long a[300][300];
long long b[300];
bool bit;
bool wea[300];

void search(long x,long y)
{
	int i;
	for (i=1;i<=c;i++)
		if (bit)
		{
		if (a[x][i]!=0)
		{
			if (b[i]==0)
			{
				b[i]=y+a[x][i];
				if (a[x][i]<0)
				{
					if (!wea[i])
					{
						wea[i]=true;
						search(i,b[i]);
						wea[i]=false;
					}
				}
				else
				{
					search(i,b[i]);
				}
			}
			else
			if (y+a[x][i]<b[i])
			{
				if (a[x][i]<0)
				{
					if (!wea[i])
					{
						wea[i]=true;
						search(i,y+a[x][i]);
						wea[i]=false;
					}
				}
			}
			else
			if (y+a[x][i]>b[i])
			{
				bit=false;
				return;
			}
			else
				return;
		}
		}
}

int main()
{
	ifstream fin("obhunt.in");
	ofstream fout("obhunt.out");
	
	fin>>d>>p>>c>>f>>s;
	
	for (i=1;i<=c;i++)
	{
		for (j=1;j<=c;j++)
			a[i][j]=0;
		b[i]=0;
	}
	b[s]=d;
	
	for (i=1;i<=p;i++)
	{
		fin>>j>>k;
		a[j][k]=d;
	}
	for (i=1;i<=f;i++)
	{
		fin>>j>>k>>l;
		if (a[j][k]==0)
			a[j][k]=-l+d;
	}
	
	bit=true;
	search(s,b[s]);
	
	j=b[1];
	if (bit==false)
	{
		fout<<"-1";
		fin.close();
		fout.close();
		return 0;
	}
	else
	{
		for (i=2;i<=c;i++)
			if (b[i]>j)
				j=b[i];
	}
	
	fout<<j;
	fin.close();
	fout.close();
	
	return 0;
}