NOIP模擬 爬山

2021-07-22 14:56:16 字數 1615 閱讀 8209

國家一級爬山運動員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又是乙個很珍惜時間的運動員,他不希望這次...