題目鏈結在此
有環當然一定盡量走環,這是搞縮點的人都知道的常識。
建了新圖之後搞點權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 的錢...