记录编号 27360 评测结果 AAAAAAAAAAA
题目名称 [USACO Nov09] 找工作 最终得分 100
用户昵称 Gravatarbelong.zmx 是否通过 通过
代码语言 C++ 运行时间 0.006 s
提交时间 2011-09-17 16:20:19 内存使用 8.84 MiB
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

const int oo=99999999;

int i,j,dd,pp,ff,cc,ss,x,y,z,ans;
int way[221][221];
int q[2200001],f[221];
bool t[221],flag;

void spfa()
{
	int head,tail,i;
	head=1;tail=1;
	q[head]=ss;t[ss]=true;f[ss]=-dd;
	do
	{
		for (i=1;i<=cc;i++)
		{
			if (way[q[head]][i]<oo)
			{
				if (f[i]>f[q[head]]+way[q[head]][i])
				{
					f[i]=f[q[head]]+way[q[head]][i];
					if (f[i]<-220000)
					{
						flag=true;return;
					}
					if (!t[i])
					{
						t[i]=true;
						tail++;q[tail]=i;
					}
				}
			}
		}
		t[q[head]]=false;head++;
	}while(head<=tail);
}

int main()
{
	freopen("jobhunt.in","r",stdin);
	freopen("jobhunt.out","w",stdout);
	scanf("%d%d%d%d%d",&dd,&pp,&cc,&ff,&ss);
	for (i=1;i<=cc;i++)
		for (j=1;j<=cc;j++)
			way[i][j]=oo;
	for (i=1;i<=pp;i++) 
	{
		scanf("%d%d",&x,&y);
		way[x][y]=-dd;
	}
	for (i=1;i<=ff;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		way[x][y]=min(z-dd,way[x][y]);
	}
	spfa();
	if (flag) printf("-1\n");
	else
	{
		for(i=1;i<=cc;i++) ans=min(ans,f[i]);
		printf("%d\n",-ans);
	}
	return 0;
}