樹dp 統計異或值

2022-06-27 02:57:12 字數 1237 閱讀 5018

給定一棵n個點的樹,每個點有權值

。定義表示

到的最短路徑上,所有點的點權異或和。

對於,求所有

的異或和。

第一行乙個整數n。

接下來n-1行,每行2個整數u,v,表示u,v之間有一條邊。

第n+1行有n個整數,表示每個點的權值

輸出乙個整數,表示所有

的異或和,其中

示例1

複製

4

1 21 3

1 41 2 3 4

複製

5

再將這6個數異或起來就可以得到答案5了。

題意:給你一棵樹以及樹上結點的權值,求任意兩點間路徑上點權值的異或,再將所有的路徑異或起來。

思路分析 :

通過邊的方式去考慮,首先可以知道每條邊會用多少次,然後就知道對應的點用了多少次,但是會有重複的

重複的部分就是借助某點任意兩點間的部分,只要減去即可。即 cnt[x] = cnt[x] - (cnt[x]-(n-1))/2;

**示例:

using namespace std;

#define ll long long

const ll maxn = 5e5+5;

const ll mod = 1e9+7;

const double eps = 1e-9;

const double pi = acos(-1.0);

const ll inf = 0x3f3f3f3f;

ll n;

vectorve[maxn];

ll size[maxn];

ll a[maxn];

ll cnt[maxn];

void dfs_init(ll x, ll fa)

}ll ans = 0;

void dfs(ll x, ll fa)

}int main()

for(ll i = 1; i <= n; i++) scanf("%d", &a[i]);

dfs_init(1, 0);

dfs(1, 0);

for(ll i = 1; i <= n; i++)

printf("%lld\n", ans);

return 0;

}

異或生成樹(樹形dp)

傳送門 題意 給定n nn個結點的權值ai 1 127 a i in 1,127 ai 1 127 求最大異或和生成樹。思路 答案的範圍為 0,127 0,127 0,127 考慮樹形dpdp dp,設dp i j dp i j dp i j 為以結點i ii為根的子樹答案是否為jjj 對於當前結點...

最長異或值路徑 字典樹應用

任何新型別的題,都可以轉換成自己熟悉的題來解答。就像下面的這題 給定乙個樹,樹上的邊都具有權值。樹中一條路徑的異或長度被定義為路徑上所有邊的權值的異或和 為異或符號。給定上述的具有n個節點的樹,你能找到異或長度最大的路徑嗎?輸入格式 第一行包含整數n,表示樹的節點數目。接下來n 1行,每行包括三個整...

異或值問題III

題目詳情 給你 n 個正整數,要求從中至少選乙個數,使他們的異或值最小。如果只選乙個數,那麼他的異或值就是本身。輸入描述 有多個測試資料,每個測試資料報含兩行,第一行是乙個正整數n 0 n 30 第二行包含 n 個正整數,每個 正整數都小於2 31,以檔案結束。輸出描述 對於每個測試資料,輸出答案。...