JZOJ 6276 noip提高組模擬1 樹

2021-09-25 23:15:23 字數 3006 閱讀 8958

d es

crip

tion

description

descri

ptio

n 求樹上不經過給定數對的路徑數對個數

資料範圍:

節點個數n≤1

05n\leq 10^5

n≤10

5,給定數對個數:m≤1

05m\leq 10^5

m≤105sol

utio

nsolution

soluti

on考慮從樣例中剖析題目

注意這棵樹是無根的,這裡只是為了方便表示所以1為根

不能經過的點對分別是

2,34,8

6,7若莫得約束條件,總方案自然是cn2

c_n^2

cn2​

,考慮每組約束條件帶來的影響

2,3影響為:siz

e[2]

×siz

e[3]

=4×3

=12size[2]\times size[3]=4\times 3=12

size[2

]×si

ze[3

]=4×

3=12

4,8影響為:6(除4,8以外的點都不能到8)

6,7影響為:siz

e[4]

×siz

e[7]

=2×1

=2size[4]\times size[7]=2\times 1=2

size[4

]×si

ze[7

]=2×

1=2

總影響為:12+8+2=22

所以答案應該是:28-22=6?

但樣例給的卻是11?

<1,2>,<1,3>,<1,4>,<1,5>,<1,6>,<1,7>,<2,4>,<2,5><3,6><3,7>,<4,5>

原來是4,8影響的多算了,因為2,3這個數對分掉了過來的3條,所以答案仍然是11

注意到當x,y

x,yx,

y莫得祖先關係時,影響就是它們子樹大小的積,否則就設祖先為u

uu,後代為v

vv,不合法範圍為v

vv的子樹內和整棵樹減去u

uu含v

vv的兒子的子樹

容斥注意到是乙個二維的關係,將它放到平面直角座標系中用掃瞄線+線段樹解決即可

時間複雜度:o(m

logn

)o(mlogn)

o(mlog

n) cod

ecode

code

#pragma gcc optimize(2) 

#include

#include

#include

#define n 100010

using

namespace std;

int n,m,cnt,dfn[n]

,rfn[n]

,ed[n]

,dep[n]

,f[n][21

];inline

long

long

read()

struct xds

inline

void

modify

(int ql,

int qr,

int d,

int k=1,

int l=1,

int r=n)

int mid=l+r>>1;

if(ql<=mid)

modify

(ql,qr,d,lson,l,mid);if

(qr>mid)

modify

(ql,qr,d,rson,mid+

1,r);up

(k,l,r)

;return;}

#undef lson

#undef rson

}t;struct tl

e[n<<1]

;inline

void

add(

int u,

int v)

;l[u]

=tot;

return;}

inline

void

dfs(

int x)

ed[x]

=cnt;

return;}

inline

intlca

(int x,

int y)

}gt;

struct nodesec[n<<2]

;int tot;

inline

void

add(

int x1,

int x2,

int y1,

int y2)

; sec[

++tot]

=(node)

;return;}

inline

bool

cmp(node x,node y)

long

long ans;

signed

main()

else

add(rfn[x]

,ed[x]

,rfn[y]

,ed[y]);

}sort

(sec+

1,sec+

1+tot,cmp)

;for

(register

int i=

1,j=

1;i<=n;i++

)printf

("%lld\n",(

long

long

)n*(n-1)

/2-ans)

;}

jzoj 6296 NOIP提高組A 投票

詳見oj 考場就剛 t1 了。首先打了個暴力 dfs 列舉選哪些數,然後 k 2dp 求出答案。設 f i j 表示前 i 個人有 j 個選好的方案數。答案即為 f k k 2 從題解發現,選的人是一段字首和一段字尾。茹氏證明 我們可以固定 k 1 個人以及他們選什麼。我們設 s1 表示有 k 2 ...

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...