洛谷 P1938 [USACO09NOV] 找工就业Job Hunt
这道题可以说是一个复活SPFA的题
因为数据比较小,SPFA也比较简单
那就复习(复读)一次SPFA吧
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue> using namespace std; int bj=;
struct edge{
int next,to,dis;
};
int d[];
int head[];
int dm,p,c,f,s;
int rd[];
edge e[];
int vis[];
int size;
int mmx=-; void spfa(int x) //本题n(c),m(p+s)极小,因此SPFA在最坏复杂度下O(mn)也不会炸
{
queue <int> q;
q.push(x);
vis[s]=;//SPFA易忘操作,标记这个点是否在队中,如果不标记可能会出现死循环
while(!q.empty())
{
int t=q.front();
q.pop();
if(rd[t]>=*(c+p+f)) //当出现环的时候一般取一个点入队(n+m)次优化效率,为了防止毒瘤出题人*了2
{
bj=;
break;
}
vis[t]=;
int i,j,k;
for(i=head[t];i;i=e[i].next)
{
j=e[i].to;
k=e[i].dis;
if(d[t]-k+dm>d[j]) //至于不能取d[t]-k+d[j]>d[j]的原因是有可能d[j]包含了d[t]
{
d[j]=d[t]-k+dm;
rd[j]++;
if(vis[j]) continue;
vis[j]=;
q.push(j);
}
}
}
}
void addedge(int next,int to,int dis)
{
e[++size].next=head[next];
e[size].to=to;
e[size].dis=dis;
head[next]=size;
}
int main()
{
scanf("%d %d %d %d %d",&dm,&p,&c,&f,&s);
int i,j;
for(i=;i<=p;i++)
{
int t1,t2;
scanf("%d %d",&t1,&t2);
addedge(t1,t2,); //题上说了没有花费
}
for(i=;i<=c;i++) d[i]=dm;
for(i=;i<=f;i++)
{
int t1,t2,t3;
scanf("%d %d %d",&t1,&t2,&t3);
addedge(t1,t2,t3);
}
spfa(j);
if(bj==) //如果出现环
{
printf("-1 \n");
return ;
}
if(!bj) //如果没有
{
for(i=;i<=c;i++)
mmx=max(d[i],mmx);
}
printf("%d",mmx);
return ;
}
洛谷 P1938 [USACO09NOV] 找工就业Job Hunt的更多相关文章
- 洛谷 1938 [USACO09NOV]找工就业Job Hunt
洛谷 1938 [USACO09NOV]找工就业Job Hunt 题目描述 Bessie is running out of money and is searching for jobs. Far ...
- P1938 [USACO09NOV]找工就业Job Hunt
P1938 [USACO09NOV]找工就业Job Hunt给边赋予价值,入边的权值为D-Ti,然后从起点开始跑最长路,如果钱的总数超过了D*C,也就是一定有一个城市走了两遍,则有正环,则输出-1 # ...
- luogu P1938 [USACO09NOV]找工就业Job Hunt
题目描述 奶牛们正在找工作.农场主约翰知道后,鼓励奶牛们四处碰碰运气.而且他还加了一条要求:一头牛在一个城市最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作.当然,它可以在别处工作一阵 ...
- 题解【洛谷P1938】 [USACO09NOV]找工就业Job Hunt
题面 题解 将路径连边\((x, y, d)\) ,将航线连边\((x, y, d - w)\).其中线路是从\(x\)到\(y\),航线的费用为\(w\),\(d\)的含义如题面. 跑一遍\(SPF ...
- [Luogu1938][USACO09NOV]找工就业Job Hunt
原题链接:https://www.luogu.org/problem/show?pid=1938 这一道题有一个比较难的点就是,这一张图上,是点上有权.既然点上有权的话,我们就不好一下子使用最短路了. ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷p3398仓鼠找suger题解
我现在爱死树链剖分了 题目 具体分析的话在洛谷blog里 这里只是想放一下改完之后的代码 多了一个son数组少了一个for 少了找size最大的儿子的for #include <cstdio&g ...
- 洛谷P1938 找工就业
传送门啦 这个题本质就是跑一边最长路,重点就是在怎么建图上. 我们可以把点权放到边权上面,即将每一个边的终点点权当做这个边的边权,这个题里就是将工钱 $ d $ 当做边权. 如果这一条边需要坐飞机才能 ...
- luogu P1938找工就业
一头牛在一个城市最多只能赚D元,然后它必须到另一个城市工作.当然它可以在别处工作一阵子后,又回到原来的城市再最多赚D美元.而且这样的往返次数没有限制城市间有P条单向路径,共有C座城市,编号1~C,奶牛 ...
随机推荐
- UVa 12186 Another Crisis 工人的请愿书
c表示某上司上报的最少请愿下属,k表示总下属c=0.01T*k=kT/100(0.01T*k是整数)c=[0.01T*k]+1=[kT/100]+1(0.01T*k不是整数) kT=100 c=1 k ...
- Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道
题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...
- OkHttp下载文件中途断网报Can't create handler inside thread that has not called Looper.prepare()异常的解决办法
最近做项目时出现个问题. 在一个基类中,创建一个Handler对象用于主线程向子线程发送数据,代码如下: this.mThirdHandler = new Handler(){ @Override p ...
- ubuntu16.04里如何正确添加用root用户来登录图形界面(图文详解)
不多说,直接上干货! Ubuntu版本都默认不允许使用root登录,必须要改配置文件. 第一步: 首先设置root密码,利用现有管理员帐户登陆Ubuntu,在终端执行命令:sudo passwd ro ...
- JS防止页面被其他网站iframe使用方法
if(window.top !== window.self){ window.top.location = window.location;} 这句话的意识是说:如果当前窗体不是顶级窗体,就把自己变成 ...
- 在linux中使用多个redis端口来构建redis集群
大家好,这是我制作的redis集群搭建视频教程. 服务器:ubnutu server(版本18.10) redis:redis-4.0.12 我这里就简单说明下大概步骤了,详细请观看教学视频. 首先更 ...
- 动手实现 React-redux(四):mapDispatchToProps
在重构 ThemeSwitch 的时候我们发现,ThemeSwitch 除了需要 store 里面的数据以外,还需要 store 来 dispatch: ... // dispatch action ...
- iPhone4 offical AD
iPhone4 is so much more than just a new products.I mean this would have a lot of impact on the way i ...
- python中的get函数
>>> a={1:'a',2:'b'}>>> print a.get(1)a>>> print a.get(3)None
- vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式
不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...