P3627 APIO2009 搶掠計畫

2022-04-30 11:00:08 字數 1268 閱讀 6246

p3627 [apio2009]搶掠計畫

tarjan縮點+最短(最長)路

顯然的縮點......

在縮點時,順便維護每個強連通分量的總權值

縮完點按照慣例建個新圖

然後跑一遍spfa最長路,列舉每個有酒吧的點即可

(但是我為什麼會搞dp呢.......)

dp:81pts

(這麼顯然的最長路,為什麼會搞dp呢.........)

怕不是被dp題毒害了(大霧)

#include#include

#include

#include

#include

using

namespace

std;

template

inline t min(t &a,t &b)

template

inline t max(t &a,t &b)

template

inline void read(t &x)

queue

h;const

int n=1000002

;int

n,m,s,p,dfs_clock,dfn[n],low[n],tot,be[n],_top,st[n];

intval1[n],cnt,hd[n],nxt[n],ed[n],poi[n];

intval2[n],cnt2,hd2[n],nxt2[n],ed2[n],poi2[n];

int d[n]; bool

bar1[n],bar2[n],vis[n];

inline

void add(int x,int

y)inline

void add2(int x,int

y)inline

void tarjan(int

x)

if(dfn[x]==low[x])

}int

spfa()

}int ans=0

;

for(register int i=1;i<=tot;++i) //列舉有酒吧的強連通分量

if(bar2[i])

ans=max(ans,d[i]+val2[i]);

return

ans;

}int

main()printf("%d

",spfa());

return0;

}

P3627 APIO2009 搶掠計畫

題目描述 siruseri 城中的道路都是單向的。不同的道路由路口連線。按照法律的規定,在每個路口都設立了乙個 siruseri 銀行的 atm 取款機。令人奇怪的是,siruseri 的酒吧也都設在路口,雖然並不是每個路口都設有酒吧。banditji 計畫實施 siruseri 有史以來最驚天動地...

P3627 APIO2009 搶掠計畫

傳送門 演算法 tarjan dp 顯然縮點後的圖是乙個dag dag上搞dp是基本操作啊 按拓撲序搞一波dp就好了 設 f i 表示從起點搶劫到 dag 上的點 i 時能得到的最多的錢 那麼 f i max f i f j sval i j 有一條邊指向 i sval i 表示dag上點 i 的錢...

洛谷P3627 APIO2009 搶掠計畫

題目大意 給你一張 n n leqslant5 times10 5 個點 m m leqslant5 times10 5 條邊的有向圖,有點權,給你起點和一些可能的終點。問從起點開始,到任意乙個終點經過的點權和的最大值是多少。題解 先把有向圖縮點,然後從起點跑最長路,對每個終點取個最大值即可 卡點 ...