POJ - 3249 Test for Job (DAG+topsort)
来源:互联网 发布:golang效率 编辑:程序博客网 时间:2024/04/29 14:10
Description
Mr.Dog was fired by his company. In order to support his family, he must find a new job as soon as possible. Nowadays, It's hard to have a job, since there are swelling numbers of the unemployed. So some companies often use hard tests for their recruitment.
The test is like this: starting from a source-city, you may pass through some directed roads to reach another city. Each time you reach a city, you can earn some profit or pay some fee, Let this process continue until you reach a target-city. The boss will compute the expense you spent for your trip and the profit you have just obtained. Finally, he will decide whether you can be hired.
In order to get the job, Mr.Dog managed to obtain the knowledge of the net profitVi of all cities he may reach (a negativeVi indicates that money is spent rather than gained) and the connection between cities. A city with no roads leading to it is a source-city and a city with no roads leading to other cities is a target-city. The mission of Mr.Dog is to start from a source-city and choose a route leading to a target-city through which he can get the maximum profit.
Input
The first line of each test case contains 2 integers n and m(1 ≤n ≤ 100000, 0 ≤m ≤ 1000000) indicating the number of cities and roads.
The next n lines each contain a single integer. The ith line describes the net profit of the cityi,Vi (0 ≤ |Vi| ≤ 20000)
The next m lines each contain two integers x, y indicating that there is a road leads from cityx to cityy. It is guaranteed that each road appears exactly once, and there is no way to return to a previous city.
Output
Sample Input
6 51223341 21 32 43 45 6
Sample Output
7
题意:一个人去找工作遇到了一道面试题,面试官要求给出一些城市和城市之间的道路,每到达一个城市,可能会赚一些钱,但是也可能会有损失。最终面试者的所得会决定他是否能得到这份工作,显而易见,越多越好。
思路:因为是有向无环图(DAG)而且其实求的是从一个0入度到0出度的路径,所以我们可以用topsort来处理,再加上简单的DP 就行了
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <queue>#include <vector>using namespace std;const int maxn = 100005;const int inf = 0x3f3f3f3f;struct Node {int v, next;}node[maxn*20];int n, m, cnt;int profit[maxn];int ind[maxn], out[maxn], dp[maxn], adj[maxn];void topsort() {queue<int> q;for (int i = 1; i <= n; i++) if (ind[i] == 0) {q.push(i);dp[i] = profit[i];}while (!q.empty()) {int cur = q.front();q.pop();for (int i = adj[cur]; i != -1; i = node[i].next) {int v = node[i].v;if (dp[v] < dp[cur]+profit[v])dp[v] = dp[cur]+profit[v];if (--ind[v] == 0)q.push(v);}}}int main() {while (scanf("%d%d", &n, &m) != EOF) {cnt = 0;memset(adj, -1, sizeof(adj));memset(ind, 0, sizeof(ind));memset(out, 0, sizeof(out));for (int i = 1; i <= n; i++) {dp[i] = -inf;scanf("%d", &profit[i]);}for (int i = 0; i < m; i++) {int a, b;scanf("%d%d", &a, &b);out[a]++;ind[b]++;node[cnt].v = b;node[cnt].next = adj[a];adj[a] = cnt++;}topsort();int ans = -inf;for (int i = 1; i <= n; i++) if (out[i] == 0 && dp[i] > ans)ans = dp[i];printf("%d\n", ans);}return 0;}
- POJ - 3249 Test for Job (DAG+topsort)
- poj--3249 Test for Job(topsort + dp)
- POJ 3249 Test for Job DAG图单源最短路
- poj 3249 Test for Job (DAG最长路 记忆化搜索解决)
- POJ 3249 Test for Job(DAG上的dp + 记忆化搜索)
- POJ 3249 Test for Job DAG图上的单源最短路径
- POJ 3249 Test for Job【DAG图上的最短路问题】
- POJ 3249 Test for Job (DAG图上的单源最短路径) 最详细的图解
- POJ 3249 Test For Job
- POJ 3249 Test for Job
- poj 3249 Test for Job
- POJ 3249 Test for Job
- POJ 3249 Test for Job
- poj 3249 Test for Job
- POJ 3249 Test for Job
- POJ 3249 Test for Job(拓扑排序)
- poj 3249 Test for Job(拓扑排序+DP)
- POJ 3249 Test for Job(记忆化搜索)
- java版本的dijkstra最短路径寻路算法
- VMware10出现"VMware Workstation 不可恢复错误: (vmx)"
- UVA 1509 Leet(暴力)
- 如果是你铁道部12306网站架构师,如何设计网站的软件架构和硬件系统架构
- 标签—table(表格)
- POJ - 3249 Test for Job (DAG+topsort)
- 解决sdk manager下载很慢或者下载失败
- java常用的正则表达式
- js分页
- java面向对象-Object类-equals()
- 海量数据处理面试题集锦
- awk过滤
- 《C++ Report》杂志文章链接
- cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。