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