HNOI 2010 彈飛綿羊

2021-07-05 05:16:04 字數 2355 閱讀 2789

要求維護乙個

n 個節點的森林,實現

m個詢問,其中包括

n<

200,

000m

<

100,

000

動態樹的入門題。

只需要實現ac

cess

操作以及維護子樹大小si

ze即可。

其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。

總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查出來。

附上**:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

double db;

typedef

long

long ll;

typedef pair< int, int > pii;

typedef pair< ll, ll > pll;

typedef pair< db, db > pdd;

const db dinf = 1e90;

const ll linf = ( ll ) 1e16;

const

int inf = 0x23333333;

const

int n = 200005;

#define it iterator

#define rbg rbegin()

#define ren rend()

#define bg begin()

#define en end()

#define sz size()

#define fdi( i, x ) for ( typeof( x.rbg ) i=x.rbg; i!=x.ren; ++i )

#define foi( i, x ) for ( typeof( x.bg ) i=x.bg; i!=x.en; ++i )

#define fd( i, y, x ) for ( int i=( y )-1, lim=x; i>=lim; --i )

#define fo( i, x, y ) for ( int i=x, lim=y; i#define mkp( a, b ) make_pair( a, b )

#define pub( x ) push_back( x )

#define pob( x ) pop_back( x )

#define puf( x ) push_front( x )

#define pof( x ) pop_front( x )

#define fi first

#define se second

namespace lct

int fa, s[2];

int size;

} a[n];

inline

bool top( const

int &x )

inline

bool dir( const

int &x )

inline

void update( const

int &x )

inline

void rotate( const

int &x )

inline

void splay( const

int &x )

update( x );

}inline

void expose( const

int &x )

inline

void link( const

int &x, const

int &y )

inline

void cut( const

int &x, const

int &y )

inline

int query( const

int &x )

}int faict[n];

int n;

void preprocessing()

}void solve()

else

cout

<< lct :: query( x ) << endl;

}}int main()

hnoi2010 彈飛綿羊

題目描述很明確,現在的目標是均攤兩個操作的複雜度 現在我們已知有兩種方法 1.每次用o 1 的時間修改k值,用o n 的時間直接模擬回答詢問 2.每次修改了k值後用o n 的時間更新所有答案,o 1 時間回答 均攤這兩種操作,可以這樣做 由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部...

HNOI2010彈飛綿羊

話說我是冒著巨大的風險a這道題的 xc說不讓上其他oj 這題其實很簡單,每個點如果他能往後跳,那就只能跳到唯一的乙個,這顯然是跟森林,用lct就好,維護下size。突然變短 include include define fo i,a,b for int i a i b i define lc c x...

HNOI2010 彈飛綿羊

某天,lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,lostmonkey在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當綿羊達到第i個裝置時,它會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則綿羊被彈飛...