洛谷P2656 採蘑菇

2022-05-20 06:01:14 字數 1286 閱讀 3681

#include#include

#include

#include

#include

#include

using

namespace

std;

struct

inter[

200040

];double hui[200040

];bool flag[80080

];int n,m,x,y,z,s,ans[80080],f1[200020],l1[200020],c[200020],dfn[80080],low[80080],tot,ci,head[80080],tail,scc[80080],val[80080

];stack

sta;

queue

qwq;

inline

void re(int &a)

while(b>='

0'&&b<='9'

) a=a*10+b-'

0',b=getchar();

if(flag)

a*=-1;}

inline

void

init()

inline

void build(int f,int l,int

c),head[f]=tail;

}void dfs(int

r)

else

if(!scc[t])//

如果這個點已經搜過但是沒有判斷在哪個環內

low[r]=min(low[r],dfn[t]);

}if(dfn[r]==low[r])//

如果說從這個點出發並且能夠回來(包括自環)

}return;}

inline

int get_val(int x)//

計算這個邊的最大價值

inline

void ret()//

重新建邊,設定點權

void spfa()//

像對普通點一樣對於縮點後得到的dag跑最長路 }}

flag[qaq]=0

; qwq.pop();

}int mx=0

;

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

答案要取最大值

mx=max(mx,ans[i]);

printf("%d

",mx);

}int

main()

洛谷 P2656 採蘑菇(Tarjan縮點,dp)

對於每一條路,很顯然只有兩種情況,一種是走一次,一種是走無限次,而第二種情況的條件是這條邊在乙個環中。所以先用tarjan縮點,每個點的權值更新為這個環上所有邊一直摘的蘑菇數的和。然後跑一邊既有邊權也有點權的dag上的dp即可。資料有鍋,後四個點答案有誤,用double存實際上錯了,但是標程是dou...

洛谷2656 採蘑菇

洛谷2656 採蘑菇 題目描述 小胖和zyr要去esqms森林採蘑菇。esqms森林間有n個小樹叢,m條小徑,每條小徑都是單向的,連線兩個小樹叢,上面都有一定數量的蘑菇。小胖和zyr經過某條小徑一次,可以採走這條路上所有的蘑菇。由於esqms森林是一片神奇的沃土,所以一條路上的蘑菇被採過後,又會長出...

洛谷 2656 採蘑菇

題目描述 小胖和zyr要去esqms森林採蘑菇。esqms森林間有n個小樹叢,m條小徑,每條小徑都是單向的,連線兩個小樹叢,上面都有一定數量的蘑菇。小胖和zyr經過某條小徑一次,可以採走這條路上所有的蘑菇。由於esqms森林是一片神奇的沃土,所以一條路上的蘑菇被採過後,又會長出一些新的蘑菇,數量為原...