比赛 |
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;
}