GDSOI2017 中學生資料結構題

2021-08-03 00:26:45 字數 2240 閱讀 6870

第一行有乙個整數 n,表示 s 國城市的數量。

接下來有 n-1 行,每行兩個數 u,v 表示一條道路。

第 n+1 行為乙個整數 q,表示接下來有 q 個操作。

接下來有 q 行,每行表示乙個操作,格式如題目描述所示。

對於每乙個 query 操作,輸出乙個數,表示詢問的當前編號為 x 和編號為 y 的城市的最短路徑間的城市 (包括編號為 x 的城市和編號為 y 的城市)的士兵總和。

sample input1:

5 1 2

1 3

3 4

3 5

6 add 1 5 2

add 3 4 1

query 1 4

shift 1 4

add 5 4 1

query 4 5

sample input12:

5 1 2

2 3

3 4

4 5

5 add 1 3 2

add 3 5 1

shift 2 4

query 1 3

query 1 5

gdoi必有一題資料結構防ak題

此題有兩種解法

第一種(我不是用的這種)

這種方法思考和實現起來比較簡單,細節也比較少,但是碼量比第二種大,大概5000~6000byte

用樹鏈剖分和splay來維護,對於每乙個重鏈和每乙個輕邊建一顆splay

add和query很簡單,用常規的樹鏈剖分做法做就行了

shift操作在兩顆splay中間時要注意,把前面的最後乙個點接到後面的第乙個點之前,再把最前面和最後面的splay維護一下即可

第二種(我用的是這種方法)

用lct維護

shift操作時要斷點和連點,所以splay會被破壞,所以要兩棵lct

一棵是編號lct,一棵是權值lct

在makeroot,access等時,編號lct的編號是固定的,可直接使用

在access的時候,splay的形態會改變,同時要保證兩棵lct形態完全相同

在add,shift,query時,找到編號lct中某個點對應在權值lct中的點,然後求值

那麼怎樣找編號lct中某個點對應的權值lct中的點呢?

需要記錄下編號lct中的每棵splay的根對應的權值lct中的每棵splay的根是哪乙個,反過來也需要記錄下來,這個只用在access和rotate的時候維護

因為兩棵lct形態相同,所以中序遍歷的點是相同的

所有找對應點時,利用編號lct中點的位置,通過中序遍歷找到權值lct對應的點

然後就愉快的碼吧

#include

#include

#include

#define n 101000

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

#define ll long long

using namespace std;

int p[n],fa[2][n],t[2][n][2],rev[2][n],n,root[2][n],s[n];

ll lz[n],sum[n],d[n],size[2][n];

int lr(int qq,int x)

void down(int qq,int x)

if(qq==1)}}

int kth(int r,int x)

void update(int qq,int x)

void rotate(int qq,int x)

fa[qq][y]=x;t[qq][x][1-k]=y;

update(qq,y);update(qq,x);

}void xc(int qq,int x)

void splay(int qq,int x,int y)

}int get(int x)

void access(int x)

}void makeroot(int x)

void link(int x,int y)

int main()

int ac;scanf("%d\n",&ac);

for(;ac;ac--)

if(ch=='s')

if(ch=='q')

}}

GDSOI2017 中學生資料結構題(LCT)

雖然這只是sone0裡很小的一部分,但是我認為這是最煩的一部分,對著乙個錯誤的題目調了兩天tat 最後才發現自己的程式的輪換打反了 如果想直接用一棵lct來做有乙個最簡單的想法,就是把x到y這段提取出來,然後再輪換一下。但是,這個想法明顯有問題,因為輪換的時候只是換了一下相對順序,並沒有交換權值的大...

GDSOI2017 中學生資料結構題 Lct練習

給出一棵樹。要求維護 一條路徑上的點權和。修改1 一條路徑上的點的點權全部加上乙個數。修改2 shift 假設乙個路徑上的點是ax,ak1,ak2,ay 就把ax的點權放到ak1上,把ak1的點權放到ak2上,把ay的點權放到ax上。我連去soi的資格都沒有 當時去聽講,不會splay,不會lct,...

關於中學生早戀

首先,中學生談戀愛是肯定影響成績的。我女兒的高中同學中,有乙個女生才貌雙全,學習成績一直在班裡保持著前三名的位置。可是,上了高三以後,此女生和另外乙個班的男生談起了戀愛,成績驟然下降,後來居然降到班裡二十多名。本來穩穩地考上清華北大的孩子,最後只能考個外地的大學。雖說學校也不錯,但和清華北大比起來,...