洛谷 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,奶牛 ...
随机推荐
- Codeforces Round #544 (Div. 3) C. Balanced Team
链接:https://codeforces.com/contest/1133/problem/C 题意: 给n个数, 在这n个数中选最多n个数,来组成一个队伍. 保证这n个数的最大最小差值不大于5. ...
- Oracle JDK各版本下载地址记录
Oracle JDK各版本下载地址: https://www.oracle.com/technetwork/java/javase/archive-139210.html
- 142 Linked List Cycle II 环形链表 II
给一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null.说明:不应修改给定的链表.补充:你是否可以不用额外空间解决此题?详见:https://leetcode.com/proble ...
- NTP服务简介
定义:NTP全称为Network Time Protocol,即网络时间协议.是用来使计算机时间同步的一种协议.它可以使计算机对服务器或时钟源做同步,可以提供高精度的时间校正(LAN 上与标准时间小于 ...
- Suricata的总体架构
Suricata的总体架构 报文检测系统通常四大部分,报文获取.报文解码.报文检测.日志记录:suricata不同的功能安装模块划分,一个模块的输出是另一个模块的输入,suricata通过线程将模块 ...
- oracle PL、SQL(概念)
一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型 ...
- nodejs+multer+ajax文件上传
前端 html代码 + ajax代码 form表单(无需指定action) <form enctype="multipart/form-data" method=" ...
- Git之删除分支
目录 删除本地分支 删除远程分支 删除本地分支: git branch -d dev [git branch -参数 本地分支名称] 删除远程分支: git push origin --delete ...
- ES-Apache Lucene
前言 在介绍Lucene之前,我们来了解相关的历史. 有必要了解的Apache Apache软件基金会(也就是Apache Software Foundation,简称为ASF)是专门为运作一个开源软 ...
- Bundle的用法
一.API文档说明 1.介绍 用于不同Activity之间的数据传递 1.重要方法 clear():清除此Bundle映射中的所有保存的数据. clone():克隆当前Bundle containsK ...