發現規律 dfs

2021-08-30 19:26:02 字數 1138 閱讀 5040

思路:

1:路徑通過對2取模之後,只剩下0或1,任意找乙個結點,然後從這個結點往下開始dfs,記錄到這個結點的距離是0的個數n。則這n+1(包括這個起始結點本身)可以從中間選取三個點符合條件。剩餘的點就又是另外的一種情況(他們到起始結點的距離為1,但是他們之間的距離是0)。

2:看了題解才發現,ijk可以值乙個點,也可以是(1,1,2)(2,1,1,)(1,2,1)這幾種情況

眾所周知,小k是乙隻連noip2018初賽都沒有過的蒟蒻,所以小k很擅長dfs序+分塊樹,但是本題與dfs序+分塊樹無關。

小k現在心態**了,因為小k被一道簡單的資料結構題給卡住了,希望請你來解決它,但是小k又不想太麻煩你,於是將題面進行了簡化(其實是出題人懶得寫題面了233333):

bob有?個點的樹,每條邊的長度有乙個邊權,現在定義???(?,?)代表第?個點到第?個點的距離模2之後的結果。問有多少(?,?,?)滿足,???(?,?) = ???(?,?) = ???(?,?)。

第一行乙個整數?代表點的數量。

接下來? − 1行每行三個數?,?,?代表有一條在?,?之間長度為?的邊。

一行乙個整數代表有多少對(?,?,?)滿足條件。

示例1複製

3

1 2 3

1 3 4

複製

9
對於100%的資料,1 ≤ ? ≤ 10000,0 ≤ ? ≤ 233。
//我是用的是結構體,通過可變長的陣列  

#include #define ll long long

using namespace std;

const int maxn=10000+10;

vector> v[maxn];

int cnt=0;

void dfs(int now,int fa,int sum)//sum為路徑和

dfs(1,-1000,0);

ll cnt2=n-cnt;

ll result=0;

result=(ll)(pow((double)cnt,3)+pow((double)cnt2,3));

cout << result << endl;

return 0;

}

吉首 WaWa的難題 DFS 規律

時間限制 1 sec 記憶體限制 128 mb haha和wawa是好朋友,他們在臨近期末的這段時間一起宅在圖書館學習。今天haha在書上看到乙個排列組合題目,思考很久後,仍然找不出其中的規律。於是他把題目敘述給了wawa。題目 乙個長度為n的排列,由數字1 n組成,它滿足兩個條件。1 數字1永遠在...

漢諾塔 非遞迴 規律發現解答

當確定盤數為n時,它所需要進行操作的次數就確定為2 n 1 當n是偶數時 1 奇數步驟一定有a b,b c,c a,a b的重複順序輸出 2 偶數步驟一定有固定的7對序對輸出順序,為 a c,a b,c b,a c,b a,b c,a c 當n是奇數時 1 奇數步驟一定有a c,c b,b a,a ...

發現環 藍橋(並查集 dfs)

試題 歷屆試題 發現環 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加...