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 條邊的有向圖,有點權,給你起點和一些可能的終點。問從起點開始,到任意乙個終點經過的點權和的最大值是多少。題解 先把有向圖縮點,然後從起點跑最長路,對每個終點取個最大值即可 卡點 ...