BZOJ 1179: [Apio2009]Atm tarjan + spfa

博客内容仅提及了'Code',未包含更多关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Code: 

#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin) 
#define maxn 500009
#define ll long long  
using namespace std;     
map<int,int>M[maxn]; 
vector<int>G[maxn]; 
stack<int>S;   
int n,m,edges,s,P,a,scc,num; 
int viss[maxn]; 
int hd[maxn],to[maxn],nex[maxn],val[maxn],mk[maxn],dfn[maxn],low[maxn],idx[maxn],vis[maxn]; 
ll dp[maxn],total[maxn];   
inline void add(int u,int v){ nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; }
void tarjan(int u)
{ 
    low[u]=dfn[u]=++scc, vis[u]=1;                     
    S.push(u);      
    for(int i=hd[u];i;i=nex[i])
    {
        int v=to[i];                                
        if(!vis[v]) tarjan(v), low[u]=min(low[u], low[v]); 
        else if(vis[v]==1) low[u]=min(low[u],dfn[v]); 
    }          
    if(low[u]==dfn[u]) 
    {
        ++num;             
        int po=0;  
        for(;;)
        { 
            int x=S.top(); S.pop();    
            po+=val[x],vis[x]=-1,idx[x]=num;            
            if(x==u) break;                
        }
        total[num]=po;  
    }
}
queue<int>Q; 
inline void spfa() 
{ 
    Q.push(idx[s]); 
    dp[idx[s]]=total[idx[s]], viss[idx[s]]=1; 
    while(!Q.empty())
    {
        int u=Q.front(); Q.pop();  
        viss[u]=0; 
        for(int i=0;i<G[u].size();++i) 
        {
            int v=G[u][i]; 
            if(dp[u] + total[v] > dp[v]) 
            {
                dp[v] = dp[u] + total[v];    
                if(!viss[v]) 
                { 
                    Q.push(v); 
                    viss[v]=1; 
                }      
            }
        }
     }
     ll tr=0; 
     for(int i=1;i<=n;++i) 
     { 
        if(mk[i]) 
        {
            tr=max(tr, dp[idx[i]]); 
        }
     }
     printf("%lld\n",tr);   
}
int main()
{ 
    //    setIO("input");   
    scanf("%d%d",&n,&m);  
    for(int i=1;i<=m;++i) 
    {
        int x,y; 
        scanf("%d%d",&x,&y); 
        if(x!=y) add(x,y);   
    }
    for(int i=1;i<=n;++i) scanf("%d",&val[i]);  
    scanf("%d%d",&s,&P); 
    for(int i=1;i<=P;++i) scanf("%d",&a), mk[a]=1;     
    tarjan(s); 
    for(int i=1;i<=n;++i) 
    {
        int cur=idx[i]; 
        for(int j=hd[i];j;j=nex[j]) 
        {
            int v=idx[to[j]];                
            if(!M[cur][v] && cur!=v) M[cur][v]=1, G[cur].push_back(v);          
        }
    }                   
    spfa();     
    return 0;   
}

  

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值