Tarjan缩点
#include<iostream>
#include<vector>
#include<queue>
#define il inline
#define ri register int
using namespace std;
const int maxn=1e4+2,maxm=1e5;
int val[maxn],sval[maxn],head[maxn],n,m,tot,timeclocks,indeg[maxn],f[maxn];
int dfn[maxn],low[maxn],_stack[maxn],top,cnt,col,belong[maxn],ne[maxn],ans=-1;
bool instack[maxn];
vector<int> in[maxn],out[maxn];
struct Node{int frm,to,nxt;}edge[maxm];
il void add(int u,int v)
{
edge[++tot].to=v,edge[tot].frm=u,
edge[tot].nxt=head[u],head[u]=tot;
}
il void init()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(ri i=1;i<=n;++i) cin>>val[i];
for(ri i=1,u,v;i<=m;++i) cin>>u>>v,add(u,v);
}
il void topo()
{
queue<int> q;
for(ri i=1;i<=col;++i) if(!indeg[i]) q.push(i);
while(!q.empty())
{
int u=q.front();q.pop();ne[++cnt]=u;
for(ri i=0;i<out[u].size();++i)
{
--indeg[out[u][i]];
if(!indeg[out[u][i]]) q.push(out[u][i]);
}
}
}
il void Tarjan(int u)
{
low[u]=dfn[u]=++timeclocks,
_stack[++top]=u,instack[u]=true;
for(ri i=head[u];i;i=edge[i].nxt)
{
int t=edge[i].to;
if(!dfn[t]) Tarjan(t),low[u]=min(low[u],low[t]);
else if(instack[t]) low[u]=min(low[u],dfn[t]);
}
if(low[u]==dfn[u])
{
++col;
while(_stack[top+1]!=u)
sval[col]+=val[_stack[top]],
instack[_stack[top]]=false,belong[_stack[top--]]=col;
}
}
il void solve()
{
for(ri i=1;i<=n;++i)
if(!dfn[i]) Tarjan(i);
}
il void build()
{
for(ri i=1;i<=tot;++i)
if(belong[edge[i].frm]!=belong[edge[i].to])
{
int nfm=belong[edge[i].frm],nto=belong[edge[i].to];
++indeg[nto],out[nfm].push_back(nto),in[nto].push_back(nfm);
}
}
il void dp()
{
for(ri i=1;i<=col;++i)
{
int u=ne[i];f[u]=sval[u];
for(ri j=0;j<in[u].size();++j)
f[u]=max(f[u],f[in[u][j]]+sval[u]);
}
for(ri i=1;i<=col;++i) ans=max(ans,f[i]);
cout<<ans;
}
int main()
{
init();
solve();
build();
topo();
dp();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具