Time Limit: 1000MS   Memory Limit: 131072K
Total Submissions: 3496   Accepted: 1191

缩点,然后每个新点跑一边SPFA

思路不难 ,注意细节~

 #include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue> using namespace std; const int M(+);
const int N(+);
int n,m,u,v,val[N],ans; int hed[N],had[N],sumedge;
struct Edge
{
int v,next;
}edge[M];
void ins(int u,int v,int *head)
{
sumedge++;
edge[sumedge].v=v;
edge[sumedge].next=head[u];
head[u]=sumedge;
} int dfn[N],low[N],tim;
int col[N],sumcol,cval[N];
int Stack[N],instack[N],top;
void DFS(int now)
{
dfn[now]=low[now]=++tim;
Stack[++top]=now,instack[now]=;
for(int i=hed[now];i;i=edge[i].next)
{
int to=edge[i].v;
if(!dfn[to]) DFS(to),low[now]=min(low[now],low[to]);
else if(instack[to]) low[now]=min(low[now],dfn[to]);
}
if(low[now]==dfn[now])
{
col[now]=++sumcol;
cval[sumcol]+=val[now];
for(;Stack[top]!=now;top--)
{
col[Stack[top]]=sumcol;
cval[sumcol]+=val[Stack[top]];
instack[Stack[top]]=;
}
instack[now]=;top--;
}
} int rd[N];
void Get_map()
{
for(u=;u<=n;u++)
for(int i=hed[u];i;i=edge[i].next)
{
v=edge[i].v;
if(col[u]!=col[v])
rd[col[v]]++,ins(col[u],col[v],had);
}
} queue<int>que;
int inq[N],dis[N];
int SPFA(int s)
{
int ret=dis[s]=cval[s];
memset(inq,,sizeof(inq));
que.push(s);inq[s]=;
while(!que.empty())
{
u=que.front();que.pop(),inq[u]=;
for(int i=had[u];i;i=edge[i].next)
{
v=edge[i].v;
if(dis[v]<dis[u]+cval[v])
{
dis[v]=dis[u]+cval[v];
ret=max(ret,dis[v]);
if(!inq[v])
que.push(v),inq[v]=;
}
}
}
return ret;
} void init()
{
sumcol=sumedge=top=tim=ans=;
memset(rd,,sizeof(rd));
memset(hed,,sizeof(hed));
memset(had,,sizeof(had));
memset(dis,,sizeof(dis));
memset(col,,sizeof(col));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(val,,sizeof(val));
memset(cval,,sizeof(cval));
memset(Stack,,sizeof(Stack));
memset(instack,,sizeof(instack));
} int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
for(int i=;i<=n;i++)
scanf("%d",val+i),val[i]=max(,val[i]);
for(int u,v;m--;)
scanf("%d%d",&u,&v),ins(u+,v+,hed);
for(int i=;i<=n;i++) if(!dfn[i]) DFS(i);
Get_map();
for(int i=;i<=sumcol;i++)
if(!rd[i]) ans=max(ans,SPFA(i));
printf("%d\n",ans);
}
return ;
}

POJ——T3160 Father Christmas flymouse的更多相关文章

  1. POJ 3126 --Father Christmas flymouse【scc缩点构图 &amp;&amp; SPFA求最长路】

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3007   Accep ...

  2. poj 3160 Father Christmas flymouse

    // 题目描述:从武汉大学ACM集训队退役后,flymouse 做起了志愿者,帮助集训队做一些琐碎的事情,比如打扫集训用的机房等等.当圣诞节来临时,flymouse打扮成圣诞老人给集训队员发放礼物.集 ...

  3. poj 3160 Father Christmas flymouse【强连通 DAG spfa 】

    和上一道题一样,可以用DAG上的动态规划来做,也可以建立一个源点,用spfa来做 #include<cstdio> #include<cstring> #include< ...

  4. POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3241   Accep ...

  5. Father Christmas flymouse

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3479   Accep ...

  6. POJ:3160-Father Christmas flymouse

    Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...

  7. L - Father Christmas flymouse

    来源poj3160 After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ...

  8. Father Christmas flymouse--POJ3160Tarjan

    Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...

  9. POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)

    POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意:  圣诞树是由n个节点和e个边构成的,点编号1-n. ...

随机推荐

  1. WPF-MVVM-Demo

    MVVM The model-view-viewmodel is a typically WPF pattern. It consists of a view that gets all the us ...

  2. [NOIP2015模拟10.22] 最大子矩阵 解题报告(单调栈)

    Description 我们将矩阵A中位于第i行第j列的元素记作A[i,j].一个矩阵A是酷的仅当它满足下面的条件:       A[1,1]+A[r,s]<=A[1,s]+A[r,1](r,s ...

  3. 线程1—Runnable

    随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...

  4. 线程1—Thread

    随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...

  5. 模拟select样式,自定义下拉列表为树结构

    效果图如下: 首先,需要用到的库jQuery,zTree(官网API:http://www.treejs.cn/v3/api.php) 注意:因为zTree是基于jQuery的,所以应该先引入jQue ...

  6. MVC中几种常用的ActionResult

    一.定义 MVC中ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等 ...

  7. form表单提交的时候,传过去的值是键值对的形式

    效果展示 第一种需求,点击input的时候,input的value发生改变 $('.group-wrapper input').click(function(){ $(this).val(0); // ...

  8. laravel5.0 自定义服务类

    一.创建加密服务类 在 app\services 目录下创建 Encrypt.php <?php namespace App\Services; class Encrypt { } 二.注册服务 ...

  9. Linux 下安装 redis 详情

    一:将redis 压缩包上传到 Linux  usr/local下 (一):在local 下创建一个 redis 目录 (二):上传redis压缩包到此目录下. 二:Linux 进入 local目录下 ...

  10. 使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装

    PXE引导的步骤: 1.开机后选择网络启动,client端向server端的dhcpd发起获取IP地址的dhcp请求. 2.server端分配IP后,dhcpd会同时根据其配置文件,通过TFTP协议发 ...