题目描述

Bessie is running out of money and is searching for jobs. Farmer John knows this and wants the cows to travel around so he has imposed a rule that his cows can only make D (1 <= D <= 1,000) dollars in a city before they must work in another city. Bessie can, however, return to a city after working elsewhere for a while and again earn the D dollars maximum in that city. There is no limit on the number of times Bessie can do this.

Bessie's world comprises P (1 <= P <= 150) one-way paths connecting C (2 <= C <= 220) cities conveniently numbered 1..C. Bessie is currently in city S (1 <= S <= C). Path i runs one-way from city A_i to city B_i (1 <= A_i <= C; 1 <= B_i <= C) and costs nothing to traverse.

To help Bessie, Farmer John will give her access to his private jet service. This service features F (1 <= F <= 350) routes, each of which is a one way flight from one city J_i to a another K_i (1 <= J_i <= C; 1 <= K_i <= C) and which costs T_i (1 <= T_i <= 50,000) dollars. Bessie can pay for the tickets from future earnings if she doesn't have the cash on hand.

Bessie can opt to retire whenever and wherever she wants. Given an unlimited amount of time, what is the most money that Bessie can make presuming she can make the full D dollars in each city she can travel to? Print -1 if there is no limit to this amount.

奶牛们正在找工作。农场主约翰知道后,鼓励奶牛们四处碰碰运气。而且他还加了一条要求:一头牛在一个城市最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作。当然,它可以在别处工作一阵子后又回到原来的城市再最多赚D美元。而且这样的往返次数没有限制。

城市间有P(1≤P≤150)条单向路径连接,共有C(2≤C≤220)座城市,编号从1到C。奶牛贝茜当前处在城市S(1≤S≤C)。路径i从城市A_i到城市B_i(1≤A_i≤C,1≤B_i≤C),在路径上行走不用任何花费。

为了帮助贝茜,约翰让它使用他的私人飞机服务。这项服务有F条(1≤F≤350)单向航线,每条航线是从城市J_i飞到另一座城市K_i(1≤J_i≤C,1≤K_i≤C),费用是T_i(1≤T_i≤50000)美元。如果贝茜手中没有现钱,可以用以后赚的钱来付机票钱。

贝茜可以选择在任何时候,在任何城市退休。如果在工作时间上不做限制,贝茜总共可以赚多少钱呢?如果赚的钱也不会出现限制,就输出-1。

输入格式

第一行:5个用空格分开的整数D,P,C,F,S。

第2到第P+1行:第i+1行包含2个用空格分开的整数,表示一条从城市A_i到城市B_i的单向路径。

接下来F行,每行3个用空格分开的整数,表示一条从城市J_i到城市K_i的单向航线,费用是T_i。

输出格式

一个整数,在上述规则下最多可以赚到的钱数。

输入输出样例

输入 #1复制

100 3 5 2 1
1 5
2 3
1 4
5 2 150
2 5 120

输出 #1复制

250

说明/提示

This world has five cities, three paths and two jet routes. Bessie starts out in city 1, and she can only make 100 dollars in each city before moving on.

Bessie can travel from city 1 to city 5 to city 2 to city 3, and make a total of 4*100 - 150 = 250 dollars.

Source: USACO 2009 November Silver

这个世界上有五个城市,三条单向路径和两条单向航线。贝茜从一号城市开始她的旅行,她在离开一个城市前最多只能在这个城市赚100美元。

贝茜可以通过从一号城市-->五号城市-->二号城市-->三号城市的旅行赚到4*100-150=250美元。

(注:在四个城市各赚100美元,从五号城市飞到二号城市花掉150美元)

来源:USACO 2009 十一月银组

分析:

把d转化为 边权值,即求最长路径,再取负得最短路径 ,spfa处理;

有负权环说明没有最短路径,输出-1;

#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int d;
int m;int n;
int f;
int s;
int dis[290];
int vis[290];
int cnt[290];
vector<pair<int,int>>v[290];
int spfa(){memset(dis,0x3f,sizeof(dis));dis[s]=0;queue<int>q;  //队列,int型,存放节点编号q.push(s);vis[s]=1;int i;while(!q.empty()){                     //1 5 -100int cur=q.front();                 //2 3 -100q.pop();                            //1 4 -100vis[cur]=0;                         //5 2 50cnt[cur]++;                         //2 5 20if(cnt[cur]>=n){//一个点进队到达n次说明有负权环,也就没有最短路径cout<<-1;return 0;}for(i=0;i<(int)v[cur].size();i++){if(dis[v[cur][i].first]>dis[cur]+v[cur][i].second){dis[v[cur][i].first]=dis[cur]+v[cur][i].second;if(vis[v[cur][i].first]==0){vis[v[cur][i].first]=1;q.push(v[cur][i].first);}}}}return 1;
}
int main (){ios::sync_with_stdio(false);cin.tie(0);cin>>d>>m>>n>>f>>s;int i,j;for(i=1;i<=m;i++){int x,y;cin>>x>>y;v[x].emplace_back(y,-d);}for(i=1;i<=f;i++){int x,y,w;cin>>x>>y>>w;v[x].emplace_back(y,-d+w);}int res=inf;if(spfa()){for(i=1;i<=n;i++){res=min(res,dis[i]);}res=-res;res+=d;cout<<res;}return 0;
}

P1938 [USACO09NOV]Job Hunt S(spfa,队列+邻接表优化)相关推荐

  1. SPFA + 静态邻接表 模板

    SPFA - shotest path faster algorithm,是一个效率很高的求最短路径的算法,也可以说是bellman-ford算法的优化版. 具体做法是先把起点放入一个队列中.每次取出 ...

  2. #1093 : 最短路径·三:SPFA算法(邻接表)

    #1093 : 最短路径·三:SPFA算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共 ...

  3. POJ1821 单调队列//ST表 优化dp

    http://poj.org/problem?id=1821 当我们在考虑内层循环j以及决策k的时候,我们可以把外层变量i看作定值,以此来优化dp状态转移方程. 题意 有n个工人准备铺m个连续的墙,每 ...

  4. 图——图的存储结构(邻接矩阵和邻接表法)

    图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...

  5. SPFA求单源最短路(邻接表)

    SPFA 介绍 SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的 ...

  6. POJ--3268--Silver Cow Party【SPFA+邻接表】

    题意:一些牛要去某一点參加聚会,然后再回到自己家,路是单向的,问花费时间最多的那头牛最少须要花费多长时间. 思路:从聚会地点返回,相当于是从某一点到其它各个点的最短路径.从牛的家中走到聚会地点,能够把 ...

  7. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  8. 邻接表的建立与spfa算法

    结构体: struct Node {int to;LL cost;int next; }edge[2*MAX]; 邻接表的建立: void add_edge(int from,int to,LL co ...

  9. 数据结构(一)——链表与邻接表、栈与队列、KMP

    前言 重学算法第3天,希望能坚持打卡不间断,从基础课开始直到学完提高课. 预计时长三个月内,明天再来!肝就完了 2月15日,day03 打卡 今日已学完y总的 算法基础课-2.1-第二章 数据结构(一 ...

  10. 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路

    题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...

最新文章

  1. linux 内核 出错-HP 方案
  2. 伪共享(false sharing),并发编程无声的性能杀手
  3. jmeter+mysql+set_jmeter学习指南之操作 mysql 数据库
  4. CF938G Shortest Path Queries
  5. Scala的所有符号运算符都意味着什么?
  6. vscode之美化js代码
  7. Python3入门机器学习经典算法与应用 第3章 Numpy数组的合并与分割
  8. python求100被3he7整除_PYTHON练习题测验
  9. 常见计算机英语词汇翻译,常见计算机英语词汇翻译_0.doc
  10. css相对单位和绝对单位
  11. 对PNG图像进行编码 Encoding the PNG image
  12. 计算机全选的键盘,全选快捷键是什么,教您电脑全选快捷键是什么
  13. QtreeWidget添加右键菜单
  14. 【基于python的量化策略回测框架搭建】策略表现衡量指标模块
  15. 按位与、按位异或、按位取反
  16. TRecgNet:基于转换识别网络进行RGB-D场景识别
  17. 火焰焰心matlab,火焰的形貌-中性焰、碳化焰、氧化焰
  18. 帆软10.0 冻结行 冻结列的 点击行变色
  19. 编译天嵌E8内核源码
  20. Apsara Clouder基础技能认证:阿里巴巴编码规范

热门文章

  1. monitor java_Java中的monitor机制
  2. [经典]PK:星际争霸 vs 魔兽争霸3 vs 红警
  3. PLM教程:CAXA 3D 与 PLM 的集成应用
  4. unity 视频录制总结
  5. 服务器自动关闭远程打印服务,实现远程打印的方法:无线网络打印服务器
  6. AST使用eval运行函数,更换数值
  7. Could not get a resource since the pool is exhausted
  8. Html中 发光字体 的CSS属性
  9. 360极速浏览器--用法
  10. 坚持学习,坚持阅读,坚持思考