hihocoder 1470 公平的遊戲

2022-09-23 20:27:20 字數 2356 閱讀 8899

hihocoder 1470 公平的遊戲:有一些人在玩乙個遊戲。遊戲的舞台發生在乙個 n 個點的樹上。

這個遊戲分為很多輪,每一輪都有一些玩家參與,每個玩家都會降落在一條給定的邊上(不同玩家的邊不同)。之後這 n 個點上都會隨機出現乙個0或者1作為權值。

我們說這一輪遊戲是公平的,當且僅當這一輪中,對於每個玩家,如果將她所在的邊刪除,那麼兩邊對應的兩個子樹的點權和是相等的。

對於每一輪,我們給出每個玩家的位置,你需要計算出該輪遊戲是公平的概率 p。為了保證輸出是整數,你只需要輸出 p 2n % (109+7) 就可以了。

輸入樹的點從1開始標號。

第一行兩個數 n 和 m 分別表示樹的點數和遊戲的輪數。

接下來 n-1行每行兩個數 a 和 b 表示一條邊。

接下來 m 行每行表示一輪遊戲。

其中的第 i 行由乙個數字 ti 開頭,表示這輪遊戲有 ti 個玩家,

接下來 ti 個數對,其中第 j 個數對 ai,j 和 bi,j 表示第 j 個玩家所在的邊的兩個端點。

n, m ≤ 100000

所有 ti 的和 ≤ 1000000

輸出輸出 m 行,每行乙個數表示答案。

樣例輸入

5 51 2

1 33 4

3 54 1 2 1 3 3 4 3 5

1 3 4

2 3 4 1 2

1 3 5

2 3 4 3 5

樣例輸出15

252對於每輪遊戲,t個邊,把樹分為t+1部分,每部分作為乙個新的結點,由這t個邊連成一棵新的樹。 如果這棵樹不是一條鏈,只有全0符合要求。 如果這棵樹是一條鏈,只考慮兩端的結點包含的原圖中的結點數,設為x,y,易證結果為cxx+y。 深度遍歷原樹,得到每個結點的開始時間和結束時間,可以o(t)時間構造新樹,判斷樹是否為鏈可以根據結點的度數。#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef uint8_t byte;

typedef int64_t illong;

typedef uint64_t ullong;

typedef uint32_t uint;

#define clean(x) memset(x,0,sizeof(x))

#define tr(i,obj) for(__typeof(obj.begin()) i=obj.begin();i!=obj.end();++i)

const int tsize=1e5+3;

const ullong mod=1e9+7;

struct node

};int n,m;

node *base[tsize];

node nodes[tsize*2];

int size[tsize],lev[tsize];

bool visited[tsize];

int st[tsize],en[tsize];

int deg[tsize];

int nodec=0;

struct sa

};sa sas[tsize*2];

int sac=0;

vector vec,stk,rs;

ullong fact[tsize],fact_inv[tsize];

ullong pow(ullong base,ullong ind)

base=(ullong)base*base%mod;

ind>>=1;

}return rs;

}void dfs(int ind)

}en[ind]=sac;

sas[sac++].set(false,ind);

assert(sac2)

stk.pop_back();}}

assert(stk.empty());

assert(rs.size()==2);

assert(rs[0]+rs[1]<=n);

return c(rs[0]+rs[1],rs[0]);

}int main() else

}assert(vec.size()==(t*2+2));

sort(vec.begin(),vec.end());

cout<

HihoCoder1470 公平的遊戲

有一些人在玩乙個遊戲。遊戲的舞台發生在乙個 n 個點的樹上。這個遊戲分為很多輪,每一輪都有一些玩家參與,每個玩家都會降落在一條給定的邊上 不同玩家的邊不同 之後這 n 個點上都會隨機出現乙個0或者1作為權值。我們說這一輪遊戲是公平的,當且僅當這一輪中,對於每個玩家,如果將她所在的邊刪除,那麼兩邊對應...

1470 調整方陣

題目描述 輸入乙個n n 10 階方陣,按照如下方式調整方陣 1.將第一列中最大數所在的行與第一行對調。2.將第二列中從第二行到第n行最大數所在的行與第二行對調。依此類推.n 1.將第n 1列中從第n 1行到第n行最大數所在的行與第n 1行對調。n.輸出這個方陣 輸入 包含多組測試資料,每組測試資料...

重新排列陣列 1470

題目 給你乙個陣列 nums 陣列中有 2n 個元素,按 x1,x2,xn,y1,y2,yn 的格式排列。請你將陣列按 x1,y1,x2,y2,xn,yn 格式重新排列,返回重排後的陣列。示例 1 輸入 nums 2,5,1,3,4,7 n 3 輸出 2,3,5,4,1,7 解釋 由於 x1 2,x...