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. 公布Qt Widgets桌面应用程序的方法

    公布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它能够在桌面.移动平台以及嵌入式平台上执行.眼下Qt 5介绍程序公布的文章帖子比較少.大家又很想要知道怎样公布Qt应用程序, ...

  2. 重写MPAndroidChart显示标记

    MPAndroidChart是实现图表功能的优秀控件, 能够完毕大多数绘制需求. 对于改动第三方库而言, 优秀的架构是继承开发, 而不是把源代码拆分出去. MP在显示标记控件(MarkView)时, ...

  3. rtmutex赏析

    [摘要] rtmutex作为futex的底层实现,有两个比較重要的特性.一个是优先级继承,一个是死锁检測.本文对这两个特性的实现进行说明. 一.优先级继承 2007年火星探路者号的vxworks上发生 ...

  4. Appium - Android 对照 iOS

    Appium - Android 对照 iOS 作者: Max.Bai 时间: 2014/10 Appium - Android 对照 iOS Appium 支持Android也支持iOS.可是两者还 ...

  5. [Poj 1015] Jury Compromise 解题报告 (完全背包)

    题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...

  6. 版本控制器:SVN(精讲)

    版本控制器:SVN 1 开发中的实际问题 1.1 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份! 1.2 这个项目 ...

  7. 为Activity生成桌面快捷方式

    有时候如果想让我们的应用在桌面上创建多个快捷方式,我们可以在Manifest.xml文件中对相应的activity进行声明. <application android:icon="@d ...

  8. PostgreSQL Replication之第九章 与pgpool一起工作(1)

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

  9. iview 分页的案例

    //html部分 //js部分

  10. nil gogo

    https://blog.csdn.net/zhonggaorong/article/details/50233421 https://github.com/KevinHM/FunctionalRea ...