BZOJ 2019 [Usaco2009 Nov]找工作:spfa【最长路】【判正环】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2019
题意:
奶牛们没钱了,正在找工作。农夫约翰知道后,希望奶牛们四处转转,碰碰运气。
而且他还加了一条要求:一头牛在一个城市最多只能赚D(1 <= D <= 1,000)美元,然后它必须到另一座城市工作。当然,它可以在别处工作一阵后又回来原来的城市再最多赚D美元。而且这样往往返返的次数没有限制。
城市间有P (1 <= P <= 150)条单向路径连接,共有N(2 <= N <= 220)座城市,编号1..N. 贝希当前处在城市S (1 <= S <= N)。路径 i 从城市A[i]到城市B[i](1 <= A[i] <= N, 1 <= B[i] <= N),在路径上行走不用花任何费用。
为了帮助贝希,约翰让它使用他的私人飞机服务。这项服务有F条(1 <= F <= 350)航线,每条航线是从城市J[i]飞到另一座城市K[i](1 <=J[i] <= N, 1 <= K[i] <= N),费用是T[i] (1 <= T[i] <= 50,000)美元。
如果贝希手中如果没有现钱,可以用以后赚的钱来付机票钱。
贝希可以选择任何时候,在任何城市退休。
如果在工作时间上不作限制,贝希总共可以赚多少钱呢?如果赚的钱也不会出现限制,就输出-1。
题解:
spfa找最长路。
如果有点入队超过n次,则存在正环,return -1。
建边:
(1)对于城市间的道路,边权设为D。
(2)对于航线,边权设为D - T[i]。
AC Code:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #include <vector>
- #include <queue>
- #define MAX_N 250
- using namespace std;
- struct Edge
- {
- int dest;
- int len;
- Edge(int _dest,int _len)
- {
- dest=_dest;
- len=_len;
- }
- Edge(){}
- };
- int n,p,f,d,s;
- int ans;
- int dis[MAX_N];
- int cnt[MAX_N];
- bool vis[MAX_N];
- vector<Edge> edge[MAX_N];
- queue<int> q;
- void read()
- {
- cin>>d>>p>>n>>f>>s;
- int a,b,c;
- for(int i=;i<p;i++)
- {
- cin>>a>>b;
- edge[a].push_back(Edge(b,d));
- }
- for(int i=;i<f;i++)
- {
- cin>>a>>b>>c;
- edge[a].push_back(Edge(b,d-c));
- }
- }
- int get_front()
- {
- int now=q.front();
- q.pop();
- vis[now]=false;
- return now;
- }
- void insert(int now)
- {
- if(vis[now]) return;
- q.push(now);
- vis[now]=false;
- cnt[now]++;
- }
- int spfa(int start)
- {
- memset(dis,0x80,sizeof(dis));
- memset(cnt,,sizeof(cnt));
- memset(vis,false,sizeof(vis));
- insert(start);
- dis[start]=d;
- int res=d;
- while(!q.empty())
- {
- int now=get_front();
- for(int i=;i<edge[now].size();i++)
- {
- Edge temp=edge[now][i];
- if(dis[temp.dest]<dis[now]+temp.len)
- {
- dis[temp.dest]=dis[now]+temp.len;
- insert(temp.dest);
- if(cnt[temp.dest]>n) return -;
- res=max(res,dis[temp.dest]);
- }
- }
- }
- return res;
- }
- void solve()
- {
- ans=spfa(s);
- }
- void print()
- {
- cout<<ans<<endl;
- }
- int main()
- {
- read();
- solve();
- print();
- }
BZOJ 2019 [Usaco2009 Nov]找工作:spfa【最长路】【判正环】的更多相关文章
- 【BZOJ】2019: [Usaco2009 Nov]找工作(spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=2019 spfa裸题.....将飞机场的费用变成负,然后spfa找正环就行了 #include < ...
- poj 1932 XYZZY(spfa最长路+判断正环+floyd求传递闭包)
XYZZY Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4154 Accepted: 1185 Description ...
- XYZZY spfa 最长路 判环
题意: 有n个点 m条边 每个边有权值 一开始有一百血 每次经过一条路都会加上其权值 判断是否能够到达n 显然 有正环的时候肯定能够到达 最短路好题!!!!!!! 显用folyed判断是否联通 ...
- bzoj2019 [Usaco2009 Nov]找工作
Description 奶牛们没钱了,正在找工作.农夫约翰知道后,希望奶牛们四处转转,碰碰运气.而且他还加了一条要求:一头牛在一个城市最多只能赚D(1 <= D <= 1,000)美元,然 ...
- 【bzoj1179】[Apio2009]Atm Tarjan缩点+Spfa最长路
题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...
- BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
高斯消元解xor方程组...暴搜自由元+最优性剪枝 -------------------------------------------------------------------------- ...
- bzoj 2017 [Usaco2009 Nov]硬币游戏 动态规划
[Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 431 Solved: 240[Submit][Status] ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
- POJ 2240 Arbitrage spfa 判正环
d[i]代表从起点出发可以获得最多的钱数,松弛是d[v]=r*d[u],求最长路,看有没有正环 然后这题输入有毒,千万别用cin 因为是大输入,组数比较多,然后找字符串用strcmp就好,千万不要用m ...
随机推荐
- SAS学习笔记之函数应用
今天在做数据需求的时候遇到一些问题,因为不能够在数据库里面做,仅仅好在SAS里面实现.这就遇到了一些麻烦,须要使用一些函数实现部分功能,如查找字段中某个特殊字符出现的次数,查找某个字符的位置等,以下一 ...
- MFC——9.多线程与线程同步
Lesson9:多线程与线程同步 程序.进程和线程是操作系统的重点,在计算机编程中.多线程技术是提高程序性能的重要手段. 本文主要解说操作系统中程序.进程和线程之间的关系,并通过相互排斥对象和事件对象 ...
- 近期公共祖先(LCA)——离线Tarjan算法+并查集优化
一. 离线Tarjan算法 LCA问题(lowest common ancestors):在一个有根树T中.两个节点和 e&sig=3136f1d5fcf75709d9ac882bd8cfe0 ...
- Uboot的串口下载文件命令:loads / loadb / loady
1. loads loads [ off ] 通过串口,下载S-Rec文件到off位置 loads命令可以通过串口线下载S-Record格式文件. 2. loadb loadb [ off ] [ b ...
- js时间戳格式化成日期格式的多种方法
js需要把时间戳转为为普通格式,一般的情况下可能用不到的, 下面先来看第一种吧 复制代码代码如下: function getLocalTime(nS) { return new Date(parseI ...
- 【PyCharm编辑器】之报:Spellchecker inspection helps locate typos and misspelling in your code, comments and literals, and fix them in one click.问题
如上图,输入一个单词时会出现波浪线,报:Spellchecker inspection helps locate typos and misspelling in your code, comment ...
- Go开发常见陷阱
Go作为一种简便灵巧的语言,深受开发者的喜爱.但对于初学者来说,要想轻松驾驭它,还得做好细节学习工作. 初学者应该注意的地方: 大括号不能独立成行. 未使用变量错误——对于全局变量和函数参数变量,是可 ...
- Linux 批量替换的一种实现方式
替换某目录下所有文件中的某个字符: sed -i 's/origin_str/new_str/g' `grep origin_str -rl ./` origin_str:被替换的字符串: new_s ...
- Content encoding error问题解决方法
A few people have been experiencing the following error. UPDATE: The reason for it happening is beca ...
- mac上利用minikube搭建kubernetes(k8s)环境
友情提示:对于初次接触k8s的同学,强烈建议先看看本文最后的参考文章. 环境: mac os(Mojave) 前提:先安装好kubectl (brew install kubectl) .docker ...