#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森林是一片神奇的沃土,所以一條路上的蘑菇被採過後,又會長出一些新的蘑菇,數量為原...