POJ 3249 拓扑排序+DP
貌似是道水题。TLE了几次。把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟。然后就AC 了。2333333....
Description:
MR.DOG 在找工作的过程中呢。遇见了这样一个问题。有n个城市,m条小道。然后要从入度为0的点出发,出度为0的点结束,中途经过的城市呢,都是要付费的。负数表示花费。正数表示收益。然后让你求收益最大或者说花费最少的总值。
貌似。BFS和DFS都会超时。不妨一试。附代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#define maxn 100005
#define maxm 1000005
#define inf 2100000000
using namespace std;
struct Arc
{
int point;
int next_arc;
};
//node 存储每个顶点,arc存储每条边。node[i]表示第i个顶点指向的第一条边在arc中的位置。next_arc表示和这条边同样出发点的下一条边在arc中的位置。
Arc arc[maxm];
int node[maxn], val[maxn];
//ind 和 outd 数组表示顶点的入度和出度 dp数组表示到达每个点的的最大收益
int ind[maxn], outd[maxn], dp[maxn];
// 数组模拟队列 tot表示总共加入的边的数量
int tot, front, rear;
int q[maxn];
void insert(int u, int v) // 加入从u指向v的一条边
{
arc[tot].next_arc = node[u];
arc[tot].point = v;
node[u] = tot++;
}
void init()
{
tot = 0;
memset(node, -1, sizeof(node));
memset(ind, 0, sizeof(ind));
memset(outd, 0, sizeof(outd));
}
void topsort() // 拓扑排序+DP
{
while(front <= rear)
{
int x = q[front++];
for (int e=node[x]; e!=-1; e=arc[e].next_arc)
{
int temp = arc[e].point;
ind[temp]--;
dp[temp] = max(dp[temp], dp[x] + val[temp]);
if (ind[temp] == 0)
{
q[++rear] = temp;
}
}
}
}
int main()
{
int n, m, x, y;
while(~scanf("%d%d", &n, &m))
{
init();
front = 0, rear = -1;
for (int i=1; i<=n; ++i)
{
scanf("%d", &val[i]);
}
for (int i=0; i<m; ++i)
{
scanf("%d%d", &x, &y);
insert(x, y);
ind[y]++;
outd[x]++;
}
for (int i=1; i<=n; ++i)
{
dp[i] = -inf;
}
for (int i=1; i<=n; ++i)
{
if (ind[i] == 0)
{
q[++rear] = i;
dp[i] = val[i];
}
}
topsort();
int ans = -inf;
for (int i=1; i<=n; ++i)
{
if (outd[i] == 0)
ans = max(ans, dp[i]);
}
printf("%d\n", ans);
}
return 0;
}
POJ 3249 拓扑排序+DP的更多相关文章
- poj 3249 拓扑排序 and 动态规划
思路:我们首先来一遍拓扑排序,将点按先后顺序排列于一维数组中,然后扫描一遍数组,将每个点的出边所连接的点进行更新,即可得到最优解. #include<iostream> #include& ...
- POJ 3249 Test for Job (拓扑排序+DP)
POJ 3249 Test for Job (拓扑排序+DP) <题目链接> 题目大意: 给定一个有向图(图不一定连通),每个点都有点权(可能为负),让你求出从源点走向汇点的路径上的最大点 ...
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- 洛谷P3244 落忆枫音 [HNOI2015] 拓扑排序+dp
正解:拓扑排序+dp 解题报告: 传送门 我好暴躁昂,,,怎么感觉HNOI每年总有那么几道题题面巨长啊,,,语文不好真是太心痛辣QAQ 所以还是要简述一下题意,,,就是说,本来是有一个DAG,然后后来 ...
- 【BZOJ-1194】潘多拉的盒子 拓扑排序 + DP
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 456 Solved: 215[Submit][Stat ...
- 【BZOJ5109】[CodePlus 2017]大吉大利,晚上吃鸡! 最短路+拓扑排序+DP
[BZOJ5109][CodePlus 2017]大吉大利,晚上吃鸡! Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏 ...
- bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- 【bzoj4011】[HNOI2015]落忆枫音 容斥原理+拓扑排序+dp
题目描述 给你一张 $n$ 个点 $m$ 条边的DAG,$1$ 号节点没有入边.再向这个DAG中加入边 $x\to y$ ,求形成的新图中以 $1$ 为根的外向树形图数目模 $10^9+7$ . 输入 ...
- 【bzoj1093】[ZJOI2007]最大半连通子图 Tarjan+拓扑排序+dp
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. ...
随机推荐
- 49个jquery代码经典片段
49个jquery代码经典片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助你又快又好地 ...
- show slave status
Slave_IO_State: Waiting for master to send event Master_Host: 10.1.1.1 ...
- android下基本json串的生成与解析
以前就用过json串,不过是在java环境下面,如今转移到android环境下,java里面生成解析json串的jar包与android中自带的冲突,所以也只能用安卓自带的. 先前查网上的资料,感 ...
- iOS开发之 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标
http://nickcheng.com/post/unique-icons-for-your-app-in-different-state-in-xcode5-debug-release 应用在发布 ...
- Linux配置全局环境变量的方法
总结3种方法: 1.修改/etc/profile 1.1 :首先在此文件中设置环境变量; 1.2:export 设置好的环境变量. #view /etc/profile export ...
- Oracle一个用户查询另一个用户的表数据
1.两个用户是在不同的库,需要建立dblink 2.属于同一个库的不同用户 1)方法一:使用"用户名."的方式访问 例如:要从USER1账号访问USER2中的表TABLE2 A. ...
- Ramdisk文件系统无法启动
当kernel是使用ramdisk时,bootm命令有两种使用方式: 1.bootm ${kernel_addr} 此种方式要求bootargs变量包含ramdisk的地址和大小,ramdisk的格式 ...
- Selenium处理时间控件
Web网页的时间控件往往嵌入到一个iframe里,抓取页面元素时,总是失败? 不要慌,WebDriver已经有相应的处理方法了. driver.switchTo().frame(driver.find ...
- js encodeURI方法认识
很早就知道js中encodeURI方法,也很早就用过,但是每次看到它总感觉有些陌生,因为不知道到底是什么原理,和普通的编码到底什么关系, 今天在查看w3c api时又遇到了她,正好有空就多看了几眼,突 ...
- Azure 云平台用 SQOOP 将 SQL server 2012 数据表导入 HIVE / HBASE
My name is Farooq and I am with HDinsight support team here at Microsoft. In this blog I will try to ...