嘟嘟嘟
這題讀完思路應該馬上就有了。
先強連通分量縮點,然後在dag上dp求最長路即可,並且只在有酒吧的點更新答案。
但是這樣不一定正確。原因就是拓撲排序是每一次把入度為0的點加入佇列,但對於每乙個點的入度,我們重新建圖的時候也算上了和起點不連通的點的貢獻,導致入度變大,進而導致有些點無法dp到,使答案變小。
所以可以只從起點跑一邊tarjan,並且標記能跑到的點。然後重建圖的時候特判即可。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11view codeusing
namespace
std;
12#define enter puts("")
13#define space putchar(' ')
14#define mem(a, x) memset(a, x, sizeof(a))
15#define rg register
16 typedef long
long
ll;17 typedef double
db;18
const
int inf = 0x3f3f3f3f;19
const db eps = 1e-8;20
const
int maxn = 5e5 + 5;21
inline ll read()
2230 inline void
write(ll x)
3136
37int
n, m, s, p, a[maxn];
38bool
bar[maxn];
39struct
edge
40e[maxn];
43int head[maxn], ecnt = -1;44
void addedge(int x, int
y)45
;47 head[x] =ecnt;48}
4950
int dfn[maxn], low[maxn], cnt = 0;51
int st[maxn], top = 0;52
bool
in[maxn], bel[maxn], vis[maxn];
53int col[maxn], ccol = 0;54
ll val[maxn];
55void tarjan(int
now)
5667
else
if(in[v]) low[now] =min(low[now], dfn[v]);68}
69if(dfn[now] ==low[now])
70while(x !=now);81}
82}8384
edge e2[maxn];
85int head2[maxn], ecnt2 = -1;86
intdu[maxn];
87void addedge2(int x, int
y)88
;90 head2[x] =ecnt2;91}
92void newgraph(int
now)
93101
}102
103 ll dp[maxn], ans = 0
;104
void topo(int
s)105
119}
120}
121122
intmain()
123131
for(int i = 1; i <= n; ++i) a[i] =read();
132 s = read(); p =read();
133for(int i = 1; i <= p; ++i)
134tarjan(s);
135 mem(head2, -1
);136
for(int i = 1; i <= n; ++i) newgraph(i);
137topo(col[s]);
138write(ans), enter;
139return0;
140 }
APIO2009 搶掠計畫
description siruseri城中的道路都是單向的。不同的道路由路口連線。按照法律的規定,在每個路口都設立了乙個siruseri銀行的atm取款機。令人奇怪的是,siruseri的酒吧也都設在路口,雖然並不是每個路口都設有酒吧。banditji計畫實施siruseri有史以來最驚天動地的a...
APIO2009 搶掠計畫 解題報告
這道題碼的十分痛苦。題目鏈結 思路 tarjan縮點,重新建圖,點權轉邊權,邊權變為負值,跑一遍spfa求最長路即可。思路很簡單,但是碼量有點痛苦,打了一百行,打兩個板子就發現了許多問題,例如 程式出錯的時候不知道是 出了問題,找錯十分麻煩。我自己出現的錯誤還是挺多的,模板不是很熟悉。include...
P3627 APIO2009 搶掠計畫
題目描述 siruseri 城中的道路都是單向的。不同的道路由路口連線。按照法律的規定,在每個路口都設立了乙個 siruseri 銀行的 atm 取款機。令人奇怪的是,siruseri 的酒吧也都設在路口,雖然並不是每個路口都設有酒吧。banditji 計畫實施 siruseri 有史以來最驚天動地...