國家一級爬山運動員h10今天獲得了一張有著密密麻麻標記的地圖,在好奇心的驅使下,他又踏上了去爬山的路。
對於爬山,h10有乙個原則,那就是不走回頭路,於是他把地圖上的所有邊都標記成了有向邊。他決定從點s出發,每到達乙個新的節點他就可以獲得一定的成就值。同時h10又是乙個很珍惜時間的運動員,他不希望這次爬山的成就值白白浪費,所以最後他一定要在乙個存檔點停下,儲存自己的成就值。
請你計算出在此次爬山運動中h10能夠得到的最大成就值。保證h10能走到存檔點。
明明是一道大水題,結果題目的意思沒有講清楚。
題意是每條邊可以走很多次,那麼明顯乙個強連通分量可以縮成乙個點了。
用tarjan縮完點之後,再用spfa找最長路就好了。
用dfs的tarjan會爆棧
所以要打非遞迴般的tarjan。
#include
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define rep(i,a) for(i=first[a];i;i=next[i])
#define rep1(i,a) for(i=first1[a];i;i=next1[i])
using
namespace
std;
const
int maxn=500007;
typedef
long
long ll;
int i,j,k,l,t,n,m,s,q;
int first[maxn],next[maxn],last[maxn],num;
int first1[maxn],next1[maxn],last1[maxn],num1,b[maxn],nn;
int data[maxn];
ll d[maxn],ans,a[maxn],zhi[maxn];
int low[maxn],dfn[maxn],dfsx;
bool bz[maxn],az[maxn];
int st[maxn],hhh,e[maxn],g[maxn];
stack
zh;
void add(int x,int y)
void add1(int x,int y)
void tarjan(int x)
}if(t==zh.top())
if(dfn[t]==low[t])
while(j!=t);
}zh.pop();}}
}void spfa(int x)}}
bz[now]=0;
}}int main()
fo(i,1,n)scanf("%d",&a[i]);
fo(i,1,n)
}fo(i,1,n)
fo(i,1,m)
scanf("%d%d",&s,&q);
memset(bz,0,sizeof(bz));
spfa(b[s]);
fo(i,1,q)
printf("%lld",ans);
}
noip模擬 小貓爬山《迭代深搜》
freda和rainbow飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 freda和rainbow只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cn。當然,每輛纜車上的小貓的重量之和不能...
NOIP2016提高A組模擬9 9 爬山
國家一級爬山運動員h10今天獲得了一張有著密密麻麻標記的地圖,在好奇心的驅使下,他又踏上了去爬山的路。對於爬山,h10有乙個原則,那就是不走回頭路,於是他把地圖上的所有邊都標記成了有向邊。他決定從點s出發,每到達乙個新的節點他就可以獲得一定的成就值。同時h10又是乙個很珍惜時間的運動員,他不希望這次...
NOIP2016提高A組模擬9 9 爬山
國家一級爬山運動員h10今天獲得了一張有著密密麻麻標記的地圖,在好奇心的驅使下,他又踏上了去爬山的路。對於爬山,h10有乙個原則,那就是不走回頭路,於是他把地圖上的所有邊都標記成了有向邊。他決定從點s出發,每到達乙個新的節點他就可以獲得一定的成就值。同時h10又是乙個很珍惜時間的運動員,他不希望這次...