[Luogu1938][USACO09NOV]找工就业Job Hunt
原题链接:https://www.luogu.org/problem/show?pid=1938
这一道题有一个比较难的点就是,这一张图上,是点上有权。既然点上有权的话,我们就不好一下子使用最短路了。
我们想一下,我们从A走向B就一定是会在A与B处赚多钱是不是。这样的话,我们就不妨将点权转化到指向它的边上。
然后,对于本身带权的边,就用点权减去边原来带的权。
这样,我们以起点开始,起点的点权为起点的dist的值(这个很好理解的吧),跑一边最长路即可。这里我们需要判一下正环,就跟在最短路中SPFA判负环一样,如果一个点入队超过n次,就说明存在负环(本题的正环)
在这张图中,所有点的权为4。所以,我们可以把这张图转化一下。
在我们这一张新图中,我们像刚刚说的那样,以起点的权为起点dist初值,跑最长路即可。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define rep(i,a,n) for(register int i=(a);i<=(n);++i)
#define per(i,a,n) for(register int i=(a);i>=(n);--i)
#define fec(i,x) for(register int i=head[x];i;i=Next[i])
#define debug(x) printf("debug:%s=%d\n",#x,x)
#define mem(a,x) memset(a,x,sizeof(a))
template<typename A>inline void read(A&a){a=0;A f=1;int c=0;while(c<'0'||c>'9'){c=getchar();if(c=='-')f*=-1;}while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();}a*=f;}
template<typename A,typename B>inline void read(A&a,B&b){read(a);read(b);}
template<typename A,typename B,typename C>inline void read(A&a,B&b,C&c){read(a);read(b);read(c);}
const int maxn=220+7,maxm=500+7;
int u[maxm],v[maxm],w[maxm],Next[maxm],head[maxn],tot;
int d,p,n,f,s,ans,x,y,z;
int dist[maxn],cnt[maxn];
bool inq[maxn];
queue<int>q;
inline void addedge(int x,int y,int z){
u[++tot]=x;v[tot]=y;w[tot]=z;
Next[tot]=head[x];head[x]=tot;
}
bool SPFA(int s){
mem(dist,-0x7f);inq[s]=1;q.push(s);dist[s]=d;
while(!q.empty()){
int x=q.front();q.pop();inq[x]=0;
fec(i,x)
if(dist[v[i]]<dist[x]+w[i]){
dist[v[i]]=dist[x]+w[i];
if(!inq[v[i]]){
inq[v[i]]=1;q.push(v[i]);++cnt[v[i]];
if(cnt[v[i]]>n)return 0;
}
}
}
return 1;
}
void Init(){
read(d,p);read(n,f,s);
rep(i,1,p){
read(x,y);
addedge(x,y,d);
}
rep(i,1,f){
read(x,y,z);
addedge(x,y,d-z);
}
}
void Work(){
int ans=SPFA(s);
if(!ans)printf("-1\n");
else{
ans=-0x7f7f7f7f;
rep(i,1,n)ans=max(ans,dist[i]);
printf("%d\n",ans);
}
}
int main(){
Init();
Work();
return 0;
}
[Luogu1938][USACO09NOV]找工就业Job Hunt的更多相关文章
- P1938 [USACO09NOV]找工就业Job Hunt
P1938 [USACO09NOV]找工就业Job Hunt给边赋予价值,入边的权值为D-Ti,然后从起点开始跑最长路,如果钱的总数超过了D*C,也就是一定有一个城市走了两遍,则有正环,则输出-1 # ...
- 洛谷 1938 [USACO09NOV]找工就业Job Hunt
洛谷 1938 [USACO09NOV]找工就业Job Hunt 题目描述 Bessie is running out of money and is searching for jobs. Far ...
- luogu P1938 [USACO09NOV]找工就业Job Hunt
题目描述 奶牛们正在找工作.农场主约翰知道后,鼓励奶牛们四处碰碰运气.而且他还加了一条要求:一头牛在一个城市最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作.当然,它可以在别处工作一阵 ...
- 洛谷 P1938 [USACO09NOV] 找工就业Job Hunt
这道题可以说是一个复活SPFA的题 因为数据比较小,SPFA也比较简单 那就复习(复读)一次SPFA吧 #include<iostream> #include<cstdio> ...
- 题解【洛谷P1938】 [USACO09NOV]找工就业Job Hunt
题面 题解 将路径连边\((x, y, d)\) ,将航线连边\((x, y, d - w)\).其中线路是从\(x\)到\(y\),航线的费用为\(w\),\(d\)的含义如题面. 跑一遍\(SPF ...
- 洛谷P1938 找工就业
传送门啦 这个题本质就是跑一边最长路,重点就是在怎么建图上. 我们可以把点权放到边权上面,即将每一个边的终点点权当做这个边的边权,这个题里就是将工钱 $ d $ 当做边权. 如果这一条边需要坐飞机才能 ...
- luogu P1938找工就业
一头牛在一个城市最多只能赚D元,然后它必须到另一个城市工作.当然它可以在别处工作一阵子后,又回到原来的城市再最多赚D美元.而且这样的往返次数没有限制城市间有P条单向路径,共有C座城市,编号1~C,奶牛 ...
- 此文记录了我从研二下学期到研三上学期的找工历程,包括百度、腾讯、网易、移动、电信、华为、中兴、IBM八家企业的面试总结和心得--转
感谢电子通讯工程的研究生学长为大家整理了这么全面的求职总结,希望进入通信公司和互联网公司做非技术类岗位的学弟学妹们千万不要错过哦~ ---------------------------原文分割线-- ...
- 北美CS求学找工指南
这篇文章主要谈谈来美求学工作这一路的点点滴滴,因为之前留言中不少同学对这方面内容比较感兴趣,有些已经在准备,有些还在犹豫,希望本文能对大家有些许帮助.因为来美的途径也有不少,有上学.有投资.有通过国内 ...
随机推荐
- 数据库的特性与隔离级别和spring事务的传播机制和隔离级别
首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离 ...
- The Cats' Feeding Spots
The Cats' Feeding Spots 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Yan Yuan, the Peking University cam ...
- Nexus Repository OSS 3安装配置使用
Nexus Repository OSS 3是一个开源的仓库管理系统,提供了更加丰富的功能,而且安装.配置.使用起来也更加简单方便.OSS 3版本主要支持的仓库(Repository)包括如下: bo ...
- zhanghao
账号:wx8b9ddd1c943ce95f 密码:fa72de9a1721849edc7f41f8a81019e5
- Your first HTML form
The first article in our series provides your very first experience of creating an HTML form, includ ...
- 移动端rem布局屏幕适配插件(放js中便可使用)
/* doc:不用管:document对象 win:不用管:window对象 design:注意:设计稿的尺寸/物理像素*/ (function (doc, win,design) {// alert ...
- curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复
curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...
- is_numeric漏洞总结
将16进制数据判断为数据,这样在存入数据库后,数据库会把16进制解析成字符串,可能造成二次注入 转载: https://www.jianshu.com/p/e7cf997d6ccb
- 利用多态,简易实现电脑usb连接设备案例
package cn.learn.Practice03; public interface UsbInterface { void open(); //打开usb void close(); //关闭 ...
- 洛谷 P1892 [BOI2003]团伙(种类并查集)
传送门 解题思路 用并查集f存朋友关系,一个数组e存的是敌人关系,是一个辅助数组,所以叫做种类并查集. 当p和q是朋友时,直接合并,但是当是敌人时,需要一些操作. 当p还没有敌人时(即p的敌人是自己) ...