jzoj4597 現世斬 平衡樹 set

2021-07-14 15:31:09 字數 833 閱讀 3429

給出有權無向連通圖,有一次機會使與乙個點相連的邊的權變為一,求最短路。顯然的想法是學習gdoi2016的一題,分層單源最短路,設f[i][0,2],表示沒有用機會,在前驅用機會,沒有機會,dijset優化就可以了。

還有一種方法,只有一次機會,影響很小,起點終點都做一次最短路,列舉在**用,掃一下邊,每條邊只被掃2次,複雜度***。

#include

#include#include#include#include#define fo(i,j,k) for(int i=j;i<=k;i++)

#define fd(i,j,k) for(int i=j;i>=k;i--)

using namespace std;

intconst maxn=100000,maxm=500000;

int n,m,gra,to[maxm*2+10],val[maxm*2+10],next[maxm*2+10],begin[maxn+10];

void insert(int u,int v,int w)

struct rec);

s.insert();

rec now=*s.begin();

for(;!s.empty();));

}else

if(now.sta==0));

if(f[to[i]][1]>now.dis+1)s.insert();

}else);}}

}int main()

dij();

printf("%lld",min(f[n][0],min(f[n][1],f[n][2])));

return 0;

}

bzoj 4597 隨機序列

你的面前有n個數排成一行。分別為a1,a2,an。你打算在每相鄰的兩個 ai和 ai 1 間都插入乙個加號或者 減號或者乘號。那麼一共有 3 n 1 種可能的表示式。你對所有可能的表示式的值的和非常感興趣。但這畢竟太 簡單了,所以你還打算支援乙個修改操作,可以修改某個ai 的值。你能夠編寫乙個程式對...

hdu4597Play Game 記憶化搜尋

兩堆數量為n n 20 的牌,每個牌都有份數 兩個人輪流拿牌,可以取兩堆數的頭或者尾中的一張 每個人都取最優解 問第乙個人能夠取得的最大分數 記憶化搜尋 dp sa ta sb tb 表示第一堆剩下sa,ta,第二堆剩下 sb,tb的最大值 include include includeusing ...

BZOJ 4597 Shoi2016 隨機序列

很可做的一道題 考慮一下一段序列的答案為b x,x為最右連續一段是乘積,然後和為x,b則為對應的左邊的和 然後考慮在右邊加乙個數k,分類討論一下發現x kx,b 2x 3b 於是就可以dp了 然後dp可以矩陣轉移 於是就可以用線段樹維護矩陣 就水過去了 好像很簡單哎,ac率好高的說 include ...