noip模擬賽(一)魔法樹

2021-07-22 09:53:36 字數 2162 閱讀 8156

魔法樹

(mahou.pas/c/cpp)

【問題描述】

魔法使mored在研究一棵魔法樹。

魔法樹顧名思義,這貨是一棵樹

,奇葩的是魔法樹上的每一條邊都擁有乙個魔法屬性

,如果不那麼奇葩就不是mored的魔法樹了。

魔法使mored在研究這棵魔法樹的方法比較奇葩,每一次他會選擇一條路徑

施法。

這個魔法是mored的看家本領,叫元素剝離。施法過程是這樣的:首先,mored將把他的寵物通靈到魔法樹上選定路徑的一端

,通靈不需要

魔法值。初始時,寵物不擁有任何屬性。

寵物會在mored的指使下沿著路徑走到另乙個端點。在走過樹上的邊時。若該寵物已經擁有該邊的屬性,該寵物就會自己施法,使用當前邊的屬性,幫自身把相同的屬性剝離,剝離完成後,寵物自身便不再帶有該屬性;否則,寵物會吸收該屬性,即讓自身擁有該屬性。

寵物完成自己的旅途後,mored要對寵物進行**。**時,若mored的寵物不帶有屬性,則mored需要使用1點魔法值。否則mored使用的魔法值將是寵物剩下的屬性所需剝離魔法值的積

,以此來幫助自己的寵物剝離剩下的屬性。

mored想知道,對於每條選定的路徑,mored需要的魔法值數額

100,000,007

取mod

的值是多少?

【輸入格式】

輸入第一行包含兩個整數n,q,k,表示魔法樹的大小,詢問數以及屬性的數量。

接下來n-1行,每行表示一條魔法樹上的邊,ai,bi,ci。表示一條連線ai,bi兩個點的邊帶有屬性ci.

接下來一行,k個整數表示對於剝離每種屬性所需的魔法值cost i。

接下來q行,每行一組詢問,pi,qi表示mored選定的施法路徑。

【輸出格式】

對於每組資料輸出一行,表示該組詢問的答案。

【輸入樣例】

5 4 3

1 2 2

1 5 3

2 3 2

2 4 1

1 2 3

3 51 3

4 54 4

【輸出樣例】

【資料範圍】

對於前40%的資料 n,q≤1,000

對於前80%的資料n≤100,000,q≤40,000

對於100%的資料n,q≤500,000 1≤ci≤k≤20 1≤ai,bi,pi,qi≤n cost i≤100,000,000

對於所有奇數點的資料滿足所有pi=1。

【題解】

#include#includeusing namespace std;

static int bin[21],root=1;

void make_bin()

inline int read()

while(c>47&&c<58)x=x*10+c-48,c=getchar();

return x*f;

}int n,q,k,m,cost[500001];

int v[1000001],first[1000001],nxt[1000001],magic[1000001];

bool vis[500001];

int qq[500101],f[1000001];

void link(int x,int y,int z)

void bfs() }}

int main()

bfs();

for(int i=1;i<=k;i++)

cost[i]=read();

while(q--)

printf("%i64d\n",mul);

} fclose(stdin);

fclose(stdout);

return 0;}/*

5 4 3

1 2 2

1 5 3

2 3 2

2 4 1

1 2 3

3 51 3

4 54 4

*/

NOIP模擬 魔法數字

在數論領域中,人們研究的基礎莫過於數字的整除關係。一般情況下,我們說整除總在兩個數字間進行,例如 a b a能整除b 表示 b 除以 a 的餘數為 0 我們稱乙個數字 x 是魔法的,當且僅當 x 是整數,且它能被 k 及 k 以上種一位數整除,要求這若干種一位數均在 x 的十進位制表示中出現。給出整...

2018 10 14 noip模擬賽 超級樹

題意 給定乙個深度為k的滿二叉樹,將他的所有節點向這個點的所有祖宗連邊,求新生成的這樣一棵樹中經過乙個點最多的路徑數目 怎麼搞?顯然是個遞推嘛.記狀態f i j 代表二叉樹的深度為i,從中選出j條互不相交的路徑的方案數 即這些路徑不會經過同乙個點超過一次 然後呢?我們會發現,由i變成i 1時,超級樹...

noip模擬賽 蒜頭君的樹

分析 這道題問的是樹上整體的答案,當然要從整體上去考慮.一條邊對答案的貢獻是這條邊一端連線的點的個數 另一端連線的點的個數 邊權,可以用一次dfs來統計答案,之後每次更改操作在原答案的基礎上增減就好了.千萬不要傻傻地去求lca.事實證明只有10分.問的是任意兩點最短距離之和,樹上兩個點的最短路徑只有...