POJ - 3249 Test for Job (DAG+topsort)
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 negative
Vi 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 city
y. It is guaranteed that each road appears exactly once, and there is no way to return to a previous city.
Output
Sample Input
6 5
1
2
2
3
3
4
1 2
1 3
2 4
3 4
5 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 (DAG最长路 记忆化搜索解决)
Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8990 Accepted: 2004 Desc ...
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)
Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...
- POJ 3087 Shuffle'm Up(洗牌)
POJ 3087 Shuffle'm Up(洗牌) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 A common pas ...
- POJ 1426 Find The Multiple(寻找倍数)
POJ 1426 Find The Multiple(寻找倍数) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 Given ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- poj 2060 Taxi Cab Scheme(DAG图的最小路径覆盖)
题意: 出租车公司有M个订单. 订单格式: hh:mm a b c d 含义:在hh:mm这个时刻客人将从(a,b)这个位置出发,他(她)要去(c,d)这个位置. 规定1:从(a,b) ...
- 【POJ】2187 Beauty Contest(旋转卡壳)
http://poj.org/problem?id=2187 显然直径在凸包上(黑书上有证明).(然后这题让我发现我之前好几次凸包的排序都错了QAQ只排序了x轴.....没有排序y轴.. 然后本题数据 ...
- POJ 3268 Silver Cow Party (双向dijkstra)
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ - 1426 Find The Multiple(搜索+数论)
转载自:優YoU http://user.qzone.qq.com/289065406/blog/1303946967 以下内容属于以上这位dalao http://poj.org/problem? ...
随机推荐
- C++ STL copy函数效率分析
在C++编程中,经常会配到数据的拷贝,如数组之间元素的拷贝,一般的人可能都会用for循环逐个元素进行拷贝,在数据量不大的情况下还可以,如果数据量比较大,那么效率会比较地下.而STL中就提供了一个专门用 ...
- Spring中继承配置的注入方法
(1)两个java类.一个父类一个字类 package com.lc.inherit; /* * 这里是父类 */ public class Student { protected String na ...
- Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
Installing and setting up Oracle GoldenGate connecting to an Oracle database Also please make sure t ...
- Android actionbar 搜索框
就是实如今顶部这种搜索框. 一.这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们能够先在menu选项里定义好: bmap_menu.xml: <?xml ...
- Wix打包系列(二)用户界面和本地化操作
原文:Wix打包系列(二)用户界面和本地化操作 上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对Sample.wxs的编译链接,生成的msi安装包没有任何用户界面,只有一个安 ...
- Java反射机制小例子
package com.wjy.main; import java.io.Console; import java.lang.reflect.Constructor; import java.lang ...
- Java正則表達式演示样例
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public s ...
- Gnu Linux--Ubuntu系统清理项整理
/********************************************************************* * Author : Samson * Date ...
- JVM必备指南(转)
本文由 ImportNew - xiafei 翻译自 anturis.欢迎加入翻译小组.转载请见文末要求. 简介 Java虚拟机(JVM)是Java应用的运行环境,从一般意义上来讲,JVM是通过规范来 ...
- 在spring MVC的controller中获取ServletConfig
在使用SmartUpload进行文件上传时,须要用到srevletConfig: 假设是在servlet中写当然是非常easy实现的: private ServletConfig config; // ...