poj 3249 Test for Job 拓扑排序 dp
来源:互联网 发布:php相似图片搜索 api 编辑:程序博客网 时间:2024/06/05 02:54
给出一张有向图,每个点有点权,现要从一条入度为0的点到一个出度为0的点,问最大点权和
dp数组,dp[i]为点i出的最大值。 我们先求出各个点的最大值。 之后比较出度等于0的点的dp,输出最大的即可。。
那么,我们怎么求各个点的dp。
利用拓扑排序,先让入度为0的点进入,dp等于他们的对应值。之后拓扑即可。 dp[v]=max(dp[v],dp[u]+cost[v]);
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 1111111
#define INF 0x3f3f3f3f
struct Edge
{
int to,next;
}edge[maxn];
int n,m,cost[maxn],in[maxn],out[maxn];
int que[maxn],head[maxn],tot,dp[maxn];
void init()
{
tot=0;
memset(head,-1,sizeof(head));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
}
void add(int u,int v)
{
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void top_order()
{
for(int i=1;i<=n;i++)
if(!in[i])dp[i]=cost[i];
else dp[i]=-INF;
int res=0;
for(int i=1;i<=n;i++)
if(!in[i])que[res++]=i;
for(int i=0;i<res;i++)
for(int j=head[que[i]];~j;j=edge[j].next)
{
int u=que[i],v=edge[j].to;
dp[v]=max(dp[v],dp[u]+cost[v]);
in[v]--;
if(!in[v])que[res++]=v;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
for(int i=1;i<=n;i++)scanf("%d",&cost[i]);
for(int i=1;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
in[b]++,out[a]++;
add(a,b);
}
top_order();
int ans=-INF;
for(int i=1;i<=n;i++)
if(!out[i]&&dp[i]>ans)
ans=dp[i];
printf("%d\n",ans);
}
return 0;
}
- poj 3249 Test for Job(拓扑排序+DP)
- POJ 3249 Test for Job(拓扑排序+dp)
- POJ 3249-Test for Job(拓扑排序&&DP)
- poj 3249 Test for Job 拓扑排序 dp
- poj 3249 Test for Job (拓扑排序)
- POJ3249 Test for Job(拓扑排序+dp)
- POJ 3249 Test for Job 拓扑图DP
- POJ 3249 Test for Job(拓扑排序)
- poj 3249 Test for Job (DP)
- poj--3249 Test for Job(topsort + dp)
- poj3249 Test for Job --- 拓扑排序
- POJ 3249 Test for Job 解题报告 DP
- POJ 3249 Test for a job dp最长路
- 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
- 程序员非正式生存指南
- HDU 6063 RXD and math (数论+快速幂)
- 认识websocket
- 我的数学之美(一)——RANSAC算法详解
- usaco Ski Course Design
- poj 3249 Test for Job 拓扑排序 dp
- HDU 4465 (candy)(期望+log优化)
- HDU5512 Pagodas
- tensorflow: 为什么 tensor型参数 可以接受 非tensor型输入
- poj3320:Jessica's Reading Problem
- 剑指offer--输入一个链表,反转链表后,输出链表的所有元素。
- Data Structure-Diagram
- 带你走进javabean的世界之内省机制
- 10月5日 c语言简单数组 输入10个数 要求从小到大顺序排列