寵物之戰
(senso.pas/c/cpp)
【問題描述】
眾所周知,mored的寵物已經被mored奴役得體無完膚。這只寵物實在忍無可忍,把自己每天走魔法樹的經歷告訴了自己的寵物。同時他還說明了自己爬樹是多麼地慢,以至於mored每天都殘酷地訓練他爬樹。
幸運的是mored的寵物的寵物不是mored的寵物,mored的寵物深知」寵物是用來寵的而不是用來奴役的」這一點,所以mored的寵物對待自己的寵物很有愛。所以mored的寵物與其寵物商量著要推翻mored的**,方法是把mored告上法庭,就以自己每天被迫爬樹來做證據。
由於魔法樹是樹,訓練樹當然也是樹啦。
mored的訓練有著gx的文化,每天mored會把自己的寵物通靈到樹的乙個端點上,這個通靈點可能與之前的通靈點相同。然後mored命令他的寵物從這個點開始走,讓這只寵物隨便訪問自己該天
之前沒有訪問過的節點
,一直走到該天無路可走
,訓練才會結束,寵物才可以休息。
mored的寵物每天都會在這棵樹上訓練,幸運的是他每天走過的訓練路徑都不同,直到若干天後,所有可能的訓練路徑都被走遍了。
你,作為mored寵物的寵物,乙隻被mored的寵物寵著的寵物,當然想幫mored的寵物算出他總共走過的路徑長度啦。
【輸入格式】
第一行包含兩個正整數n,m,表示樹的點數與邊數。
接下來m行,每行三個正整數表示li,bi,ci分別表示樹上有一條長度為
li的連線bi,ci
兩個結點的邊
。
【輸出格式】
僅一行表示答案。
【輸入樣例】
12 1
13 1
24 2
25 2
【輸出樣例】
【資料範圍】
對於30%的資料n≤300
對於70%的資料n≤3,000
對於100%的資料對於所有輸入的整數均不大於100,000,輸入的樹保證連通,無重邊,無自環
。
【樣例解釋】
可能的訓練路徑有(1-2-4),(1-2-5),(1-3),(2-4),(2-5),(2-1-3),(3-1-2-4),(3-1-2-5)
(4-2-5),(4-2-1-3),(5-2-4),(5-2-1-3)
長度依次為3,3,1,2,2,2,4,4,4,4,4,4。和為37.
【題解】
從樣例模擬解釋中尋找規律,發現樹的每條邊會累加多次,那麼,只要求出每條邊的累計貢獻的規律即可解決題目。
而,每條邊的貢獻=該邊的左子樹的葉節點數*右子樹的節點數+該邊的右子樹的葉節點數*左子樹的節點數。
#include#include#includeusing namespace std;
typedef long long ll;
inline int read()
while(c>47&&c<58)x=x*10+c-48,c=getchar();
return x*f;
}static long long ans=0;
int d[100001],f[100001],s[100001];
int n,cnt,v[200001],first[200001],nxt[200001],dis[200001];
void link(int x,int y,int z)
void dfs(int pa,int rt)
}void solve(int pa,int rt)
}int main()
dfs(0,1);
solve(0,1);
printf("%i64d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
noip模擬賽(一)魔法樹
魔法樹 mahou.pas c cpp 問題描述 魔法使mored在研究一棵魔法樹。魔法樹顧名思義,這貨是一棵樹 奇葩的是魔法樹上的每一條邊都擁有乙個魔法屬性 如果不那麼奇葩就不是mored的魔法樹了。魔法使mored在研究這棵魔法樹的方法比較奇葩,每一次他會選擇一條路徑 施法。這個魔法是mored...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...