比赛 20110916 评测结果 AWWWWWWTWWE
题目名称 找工作 最终得分 9
用户昵称 belong.zmx 运行时间 1.098 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2011-09-16 20:41:18
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

struct edge
{
	int to,fo,co;
};

int d,dd,cc,ff,s,i,j,x,y,z,top,ans;
edge p[150];
bool flag,l[221];
int f[221],m[221],k[221],q[221],c[221];

void dfs(int x,int y,int now)
{
	if (f[y]>now+d) return;
	if (f[y]<now+d)
	{
		f[y]=now+d;
		if (q[y]==x)
		{
			flag=true;
			return;
		}
		else q[y]=x;
	}
	int i=c[y];
	while (i!=0)
	{
		if (p[i].co==0)
		{
			dfs(y,p[i].to,now-p[i].co+d);
			if (flag) return;
		}
		i=p[i].fo;
	}
	i=c[y];
	while (i!=0)
	{
		if (p[i].co>0)
		{
			dfs(y,p[i].to,now-p[i].co+d);
			if (flag) return;			
		}
		i=p[i].fo;
	}
}

int main()
{
	freopen("jobhunt.in","r",stdin);
	freopen("jobhunt.out","w",stdout);
	scanf("%d%d%d%d%d\n",&d,&dd,&cc,&ff,&s);
	for (i=1;i<=dd;i++)
	{
		scanf("%d%d\n",&x,&y);
		top++;p[top].fo=c[x];c[x]=top;p[top].to=y;p[top].co=0;
	}
	for (i=1;i<=ff;i++)
	{
		scanf("%d%d%d\n",&x,&y,&z);
		top++;p[top].fo=c[x];c[x]=top;p[top].to=y;p[top].co=z;
	}
	dfs(9999,s,0);
	if (flag) printf("-1\n");
	else
	{
		for (i=1;i<=cc;i++) ans=max(ans,f[i]);
		printf("%d\n",ans);
	}
	return 0;
}