省選模擬 66 75

2022-03-26 22:52:04 字數 1490 閱讀 4989

\(fwt\)

給定乙個無向圖,要求給每條邊定向後成為有向無環圖,求方案

考慮那個\(dp\)

\[dp[s]=\sum_(-1)^dp[s-w]

\]發現就是乙個子集卷積的形式,所以開第二維再卷積就好了

模擬發現如果度數都小於3就可以根據有無環出答案

否則假如第乙個度數等於3的點為\(x\),那麼為了使\(x\)最後度數小於3,最終消掉的點就只能是\(x\)或它相鄰的3個點這四種選擇

所以把去掉這4個點的圖分別建出來就好了

二維數點

有\(n\)條直線,求在\((x1,y1,x2,y2)\)這個矩形內至少乙個交點的對數

如果把矩形的四條邊順時針展開成一條線段,那麼一條直線截線段必然會截出乙個區間

考慮到兩直線相交等價於區間相交,即對於\((l1,r1),(l2,r2)\)滿足\(l2\in[l1,r1]\&\&r2>r1\)

#include#include#define ll long long

using namespace std;

const int n=3e5+50;

const int inf=0x3f3f3f3f;

inline int rd(register int x=0,register char ch=getchar(),register int f=0)

struct matrix

}g[n];

int v[n][2];

void output(matrix *a)

namespace lct

bool get(int x)

void pushup(int x);

if(ch[x][1]) g[x]=g[ch[x][1]]*g[x];

if(ch[x][0]) g[x]=g[x]*g[ch[x][0]];

} void rotate(int x)

void splay(int x)

void access(int x) }}

using namespace lct;

int n,typ,lastans;

int main()

}

共有\(m\)個球分為\(n\)種顏色每種球有\(a_i\)個,求把這些球排列使得恰好有\(k\)對球相鄰的方案數

若干個點合併成1個集合,大集合點向小集合點連邊,現在給定連邊方案,問最小合併次數

兩人博弈,輪流操作,在網格圖內,小j每次可以(放置任意個)在上下相鄰的兩個點放牆,但不能讓大墩與最後一行不連通

大墩從第一行出發,最後權值為所有格仔的權值和(重複計算),大墩想最小,小j想最大,問最小答案

那麼\(sum[u]>=u\),說明\(ans>=sum[u]+1\)

因為對於\(ans\),\(ans=min(sum[u]==u)+1\)

說的很費勁

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...

省選模擬96

容易發現當 k 3 時無解。然後容易證明當 k 3 時,只有 m 3 才是有解的。然後直接做不好做,考慮欽定然後容斥出合法方案。對於 k 3 列舉乙個點,然後計算另乙個的方案數。其他情況類似,欽定滿足條件的角,然後容斥。然後對於每乙個 o n 的式子用組合恒等式大力化簡就可以做到 o 1 了。考慮每...

省選模擬86

首先考慮基礎的dp定義,那麼發現轉移需要的係數只和dp是奇數的點的個數有關,所以將這個東西記錄在dp狀態中就行了。然後推一下dp轉移,發現轉移係數和奇數的點的個數沒有關係,只與是否存在這樣的點有關,所以用01來記錄就可以了。考慮用總方案減去不合法的方案,也就是1號點能到達的點和2號點能到達的點沒有交...