BSOJ3392 省選模擬 樹上的詢問

2022-09-15 00:39:16 字數 1360 閱讀 7772

bsoj3392【省選模擬】樹上的詢問

點分治。

點分治入門題,首先這題可以直接做,也可以轉化成 "小於等於 \(k\) 的減掉 小於等於 \(k-1\) 的" ,然後相減來做。

兩者皆可。

#includeusing namespace std;

#define ll long long

#define ull unsigned long long

inline int inc(int x,int v,int mod)

inline int dec(int x,int v,int mod)

inline int read()while(ch>='0'&&ch<='9')return x*f;}

inline void write(int x)int len=0,dg[20];while(x>0)for(register int i=len;i>=1;i--)putchar(dg[i]+48);}

const int n=1e5+5;

const int m=1e7+5;

struct nodeedge[1000005];

int used[n],head[n],idy,q[n],maxson[n],tot,size[n],dis[n],rev[n],cnt;

bool vis[n],ans[n],rvis[m];

int n,m,id,idx;

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

void dfs(int x,int fa)

maxson[x]=max(maxson[x],tot-size[x]);

if(maxson[x]=0&&q[k]-rev[j]<=1e7 && rvis[q[k]-rev[j]])ans[k]=1;

}} for(int j=1;j<=cnt;j++) if(rev[j]<=1e7)used[++idy]=rev[j],rvis[rev[j]]=1;

} for(int i=1;i<=idy;i++)rvis[used[i]]=0;

}void solve(int x)

}int main()

for(int i=1;i<=m;i++)q[i]=read();

maxson[id]=tot=n;

dfs(1,0);

solve(id);

for(int i=1;i<=m;i++)

return 0;

}

這題第二種做法很巧妙,同樣的辦法在一道模擬題也見過,同樣是容斥,但是那道題是 \(dp\) 。

4 3 省選模擬賽 石子遊戲 樹上博弈

注意觀察題目 每個點都只能將石子給自己的兩個兒子 且石子個數 1.顯然 這是乙個階梯nim.只有和最後一層的奇偶性相同的層才會有貢獻 證明也很顯然。那麼這其實就是近乎nim遊戲了 勝負自然取決於所有有貢獻的石子堆的異或和。但是 上午我傻了的一點 沒有分清sg函式和nim遊戲的聯絡。在nim遊戲中sg...

NOI省選模擬 小奇的花園

題目背景 小奇在家中的花園漫步時,總是會思考一些奇怪的問題。問題描述 小奇的花園有n個溫室,標號為1到n,溫室以及以及溫室間的雙向道路形成一棵樹。每個溫室都種植著一種花,隨著季節的變換,溫室裡的花的種類也在不斷發生著變化。小奇想知道從溫室x走到溫室y的路徑中 包括兩個端點 第t種花出現的次數。輸入格...

JZOJ 省選模擬 夕張的改造 kaisou

description 提督們驚奇地發現,2019 年實裝的改造非常少。經調查,原來是改造廠的廠長於八日剋扣了其他艦娘改造的圖紙,並且在 2020 年的第乙個月利用這些圖紙進行了華麗的改造,一共有三種形態,於八日改二,於八日改二特,於八日改二丁,對空 對陸 對潛 開幕雷 五裝備格,無所不能。鎮守府雪...