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. 第十六周项目3:max带来的冲突

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名:project.cpp *作 者:陈文青 *完毕日期:20 ...

  2. Elasticsearch中的CRUD

    在<玩玩儿Elasticsearch>中简介了一下elasticsearch.这篇文章.我们还是做些基础的学习.在Elasticsearch怎样进行CRUD? 如果我们正在创建的一个类似微 ...

  3. 编写SDR SDRAM页突发模式控制器的注意点

    网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...

  4. bzoj1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

    1010: [HNOI2008]玩具装箱toy 题目:传送门 题解: 很明显的一题动态规划... f[i]表示1~i的最小花费 那么方程也是显而易见的:f[i]=min(f[j]+(sum[i]-su ...

  5. php中file_get_contents如何读取大容量文件

    php中file_get_contents如何读取大容量文件 一.总结 一句话总结:使用file_get_contents()进行分段读取,file_get_contents()函数可以分段读取 1. ...

  6. Windows10+VS2013+caffe+Python2.7+CUDA8.0 部署配置

    所需环境工具: 1. Windows 10 2. VS2013 3. Windows版本的caffe工具包,地址:https://github.com/Microsoft/caffe 4. Anaco ...

  7. SharePoint InfoPath 保存无法发布问题

    设计完表单以后提示以下错误 错误描述 InfoPath无法保存下列表单:******* 此文档库已被重命名或删除,或者网络问题导致文件无法保存.如果此问题持续存在,请于网络管理员联系. 可参考网站 & ...

  8. Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程

    这几天,很多朋友在群里问Scrapy安装的问题,其实问题方面都差不多,今天小编给大家整理一下Scrapy的安装教程,希望日后其他的小伙伴在安装的时候不再六神无主,具体的教程如下. Scrapy是Pyt ...

  9. Python对象引用的所有权

    目录 引用所有权 传递引用的所有权--返回值 出借引用的所有权--返回值 占据引用的所有权--参数 出借引用的所有权--参数 引用所有权 谁持有对象引用的所有权,谁就要对对象负责. 引用的所有权对函数 ...

  10. Unity WebGL 窗口自适应

    unity 打包好WebGL后,用文本编辑器编辑打包生成的 index.html 文件 在生成的html里面修改代码     <script type="text/javascript ...