ASDFZ NOIP2016模擬 植樹方案

2021-08-02 11:18:09 字數 2827 閱讀 3998

植樹方案

(scheme.cpp/c/pas)

題目描述

t 國打算種一批樹。 所謂樹, 就是由 n 個結點與 n – 1 條邊連線而成的連通

無向圖。 t 國的國王對於這些樹有下列要求:

1、 樹沒有根, 但它的形態是給定的(即這 n – 1 條邊是給出的);

2、 樹的每條邊上可以放置一朵花(當然也可以不放置);

3、 共 q 條約束, 第 i 組約束規定: 標號 ui

的結點到標號 vi

的結點的簡單路

徑上, 花的數量為奇數或偶數。

現在,國王想事先知道他最多能種多少棵不一樣的樹(兩棵樹被視為不一

樣當且僅當一棵樹中某條邊的放花情況與另一棵樹不相同)。

輸入格式

第 1 行兩個整數 n, q;

接下來 n – 1 行, 每行兩個整數 u、 v, 表示 u、 v 間存在一條邊;

接下來 q 行,每行三個整數 ui

、 vi

、 ki

,若 ki

為 0,表示 ui

到 vi

的簡單路徑上花的個數為偶數,否則為奇數。

輸出格式

一行乙個整數,表示能種的不一樣的樹的種數,對 998244353 取模。

樣例資料

scheme.in

5 2

1 2

1 3

1 5

4 5

1 5 0

2 4 1

scheme.out

4【資料範圍】

對於 20%的資料, n, q ≤ 20;

對於 40%的資料, n, q ≤ 100;

對於 70%的資料, n, q ≤ 5000;

對於 100%的資料, n, q ≤ 100000、 0 ≤ ki

≤ 1。

分析:首先得知道乙個性質:奇數^奇數=偶數,偶數^偶數=偶數,偶數^奇數=奇數,這與奇偶的加減是完全相同的。

本來,我們做出的圖是這樣的(發現自己畫的不是樹,但是不要在意這些細節啦,中間的點點代表還有很多中間點):

然後,根據限制條件我們把圖簡化成這樣(同一種顏色代表他們需要是一致的【在同一聯通塊】,要麼都種花要麼都不種,反之表示需要相反【在不同聯通塊】,可能會有點懵逼,下面我再解釋一下):

從原圖我們知道,我們簡化前其實一條路徑的兩頭的兩條邊是我們的起點終點可以控制的,比如說如果中間省略部分有奇數朵花且這條路徑上要求有偶數朵花,那麼我們在這兩條邊上可以選擇在其中一條上種花,有兩種可能,又比如說如果中間省略部分有偶數朵花且這條路徑上要求有偶數朵花,那麼我們在這兩條邊上可以選擇在其中兩條上都種花或者都不種,也有兩種可能。而對於那些被簡化掉的點,沒有任何邊與之相連,所以自己是乙個聯通塊,有種和不種兩種。故有多少個聯通塊,就乘上2的多少次方(之前的版本理解有誤,2017.6.16更新)。

**

可結合我簡陋的圖理解

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=100010;

const

int mod=998244353;

int n,m,tot,ans,cnt,bz;

int c[n],first[n],next[n<<1],to[n<<1],w[n<<1];

int getint()

for(;ch>='0'&&ch<='9';ch=getchar())

sum=(sum<<3)+(sum<<1)+ch-48;

return f*sum;

}void addedge(int x,int y,int z)//將有用的部分建邊

void dfs(int u)

else

//要求是奇數

else

//如果終點已經有要求了就做判斷(兩種矛盾)

if(w[e]==0&&c[v]!=c[u])

if(w[e]==1&&c[v]==c[u])

}}int main()

while(m--)//把有限制的部分兩端點建邊

for(int i=1;i<=n;++i)//構造聯通塊

else

//聯通塊數量+1

cnt++;}}

ans=1;

for(int i=1;i//每個聯通塊都有兩種可能

ans=(ans<<1)%mod;

cout

0;}

本題結。

GDOI2016模擬8 8旋轉

alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...

GDOI2016模擬8 13總結

這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...

GDOI2016模擬8 16幫派

農場裡的生活很艱苦,而且當生活很艱苦,你必須堅強起來。奶牛們形成了編號為1到m的幫派。這些幫派一開始和睦相處了一段時間,但是現在失控了!奶牛們在競爭一片大草地的控制權。奶牛之間的衝突發生在連續的若干分鐘內。每一分鐘有乙隻奶牛走進草地。如果此時草地上沒有奶牛,那麼這只新進去的奶牛所在的幫派就能占領這片...