給定一棵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,以檔案結束。輸出描述 對於每個測試資料,輸出答案。...