\(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號點能到達的點沒有交...