Luogu P3627搶掠計畫(縮點最短路)

2022-05-01 02:09:12 字數 1505 閱讀 9823

題目鏈結在此

有環當然一定盡量走環,這是搞縮點的人都知道的常識。

建了新圖之後搞點權spfa跑最長路。列舉每個酒吧選擇最大值。

發現我的部落格寫的越來越水了

#include#include

#include

inline

long

long

read()

while

(isdigit(ch))

return num*f;

}inline

long

long max(long

long a,long

long b)

inline

long

long min(long

long a,long

long b)

struct

edge;

struct

pic;

head[

from]=num;

}}old,new;

int que[1000000

];int fsh[1000000

];int f[2000000],h,t=1

;int stack[1000000

],top;

int dfn[1000000],low[1000000

],id;

int col[1000000

],cnt;

int val[1000000

];bool vis[1000000

];int dis[1000000

];void tarjan(int

x)

else

if(vis[to]) low[x]=min(low[x],dfn[to]);

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

top--;

}}int

ans;

intmain()

for(int i=1;i<=n;++i) que[i]=read();

int s=read(),p=read();

for(int i=1;i<=p;++i) fsh[i]=read();

for(int i=1;i<=n;++i)

if(!dfn[i]) tarjan(i);

for(int i=1;i<=n;++i)

for(int j=old.head[i];j;j=old.edge[j].next)

f[1]=col[s];

memset(vis,

0,sizeof

(vis));

dis[col[s]]=val[col[s]];

while(h}}}

for(int i=1;i<=p;++i) ans=max(ans,dis[col[fsh[i]]]);

printf("%d

",ans);

return0;

}

P3627 APIO2009 搶掠計畫

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

P3627 APIO2009 搶掠計畫

p3627 apio2009 搶掠計畫 tarjan縮點 最短 最長 路 顯然的縮點.在縮點時,順便維護每個強連通分量的總權值 縮完點按照慣例建個新圖 然後跑一遍spfa最長路,列舉每個有酒吧的點即可 但是我為什麼會搞dp呢.dp 81pts 這麼顯然的最長路,為什麼會搞dp呢.怕不是被dp題毒害了...

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 的錢...