NOIP2016提高A組模擬9 9 爬山

2021-07-22 15:01:37 字數 1922 閱讀 3704

國家一級爬山運動員h10今天獲得了一張有著密密麻麻標記的地圖,在好奇心的驅使下,他又踏上了去爬山的路。

對於爬山,h10有乙個原則,那就是不走回頭路,於是他把地圖上的所有邊都標記成了有向邊。他決定從點s出發,每到達乙個新的節點他就可以獲得一定的成就值。同時h10又是乙個很珍惜時間的運動員,他不希望這次爬山的成就值白白浪費,所以最後他一定要在乙個存檔點停下,儲存自己的成就值。

請你計算出在此次爬山運動中h10能夠得到的最大成就值。保證h10能走到存檔點。

第一行兩個整數 n,m,表示點數和邊數。

接下來 m 行,每行兩個整數 u,v,表示u到v有一條有向邊(沒有自環)。

第 m+2 行 n 個正整數,表示每個點的成就值。

接下來一行兩個整數 s,p,表示出發點和存檔點個數。

下面一行 p 個整數,表示存檔點。

乙個正整數,表示最大成就值。

5 7

5 1

3 1

2 5

3 5

4 3

4 2

4 5

7 6 3 2 2

4 3

1 5 2

對於 30% 的資料, n,m≤1000,並且地圖為有向無環圖。

對於 100% 的資料, n,m≤500000。(資料有梯度,注意答案的大小)

這題和以前做過的某道題是幾乎一樣的

對於無環圖,直接spfa,最後找到最大的乙個終點,就行了

那麼有環呢?縮環解決

縮環顯然是用tarjan

然而tarjan一般是要遞迴的,這裡會爆棧,於是打人工棧

不會的點上面的tarjan

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define n 501000

#define ll long long

using namespace std;

int n,m,last[n*10],next[n*10],to[n*10],b[n][2],d[n*10],tot=0,bz[n],bz2[n],low[n],dfn[n],p[n],c[n],totot=0,zx[n],zi[n],zk[n],o;

ll a[n],f[n],co[n];

void putin(int

x,int

y)void spfa(int

s) }

bz[q]=0;

}}void tarjan1()

else

if(bz2[to[i]]) low[x]=min(low[x],dfn[to[i]]);

}if(low[x]==dfn[x])

o--;

}void tarjan2()

else

if(bz2[to[i]]) low[x]=min(low[x],dfn[to[i]]);

}if(low[x]==dfn[x])

o--;

}void tarjan(intx)}

int main()

fo(i,1,n) scanf("%lld",&a[i]);

ints,q;scanf("%d

%d",&s,&q);

ll ans=0;tot=0;

fo(i,1,n) if(!bz[i]) tarjan(i);

fo(i,1,n) co[c[i]]+=a[i];

memset(last,0,sizeof(last));tot=0;

fo(i,1,m) putin(c[b[i][0]],c[b[i][1]]);

spfa(c[s]);

for(;q;q--)

printf("%lld",ans);

}

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...

NOIP2016提高A組模擬9 2 單峰

問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...