異或的路徑

2021-09-24 05:16:32 字數 1002 閱讀 6338

思路:dfs處理出根節點到全部節點的異或值,然後對每一位二進位制計算貢獻;第i位就是2^i的貢獻,而貢獻的數量就是0和1的數量積,因為只有端點是0和1路徑異或後才是1,該位才會1;最好乘二是終起點可以調換;

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define sfi(i) scanf("%d",&i)

#define sfs(i) scanf("%s",(i))

#define pri(i) printf("%d\n",i)

#define sff(i) scanf("%lf",&i)

#define ll long long

#define ull unsigned long long

#define mem(x,y) memset(x,y,sizeof(x))

#define inf 0x3f3f3f3f

#define eps 1e-16

#define pi acos(-1)

#define lowbit(x) ((x)&(-x))

#define zero(x) (((x)>0?(x):-(x))'9')

while(ss>='0'&&ss<='9')

return f*x;

}vector>g[maxn];

int n;

int val[maxn];

void add(int u,int v,int w));}

void dfs(int u)

dfs(1);

ll ans=0;

for(int i=0;i<=20;i++)

ans=ans+(yi*(n-yi)%mod)*((1l

}cout<}

最長異或路徑

題目鏈結 戳我前置知識 什麼是異或?如果二進位制下同一位不相同,則為 1 否則為 0 trie樹 基本位運算 對於同一條邊異或兩次,相當於沒有進行異或,我們將dis i 表示為從i點到根節點的路徑異或和。則問題轉化為了求兩點的dis異或最大值 貪心的想,對於乙個數x,我們對於dis i x最大,則每...

異或的路徑 樹形DP

給一棵 n 個點的樹,1 號節點為根,邊有邊權,令 f u,v 表示 u 節點到 v 節點,路徑上邊權異或值。求 i 1n j 1nf i,j sum sum f i,j i 1n j 1n f i,j 結果對 1000000007 取模。第一行乙個整數 n n 100000 n n leq 100...

Trie 樹上異或路徑的應用

鏈結 給定n個字串s1,s2 sn,接下來進行m次詢問,每次詢問給定乙個字串t,求s1 sn中有多少個字串是t的字首。輸入字串的總長度不超過106,僅包含小寫字母。輸入格式 第一行輸入兩個整數n,m。接下來n行每行輸入乙個字串si。接下來m行每行乙個字串t用以詢問。輸出格式 對於每個詢問,輸出乙個整...