牛客練習賽32 B題 Xor Path

2022-03-03 07:57:55 字數 1470 閱讀 1772

給定一棵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了。

題解:考慮每個點的經過次數sum=子樹經過該點到另乙個子樹+子樹上的點經過該點到外面的點+該點到其他點(就是n-1);

如果sum為奇數則對答案有貢獻,偶數沒有貢獻;最後將是奇數的點的權值異或即可;

參考**:

1 #include2

using

namespace

std;

3#define clr(a,val) memset(a,val,sizeof(a))

4#define ri register int

5#define eps 1e-6

6 typedef long

long

ll;7

const

int inf=0x3f3f3f3f;8

inline ll read()912

while(ch>='

0'&&ch<='9')

13return x*f;14}

15const

int maxn=1e6+10;16

ll n,u,v,tot,head[maxn],val[maxn];

17ll cnt[maxn],ans;

18struct

edge edge[maxn];

21 inline void init()

22 inline void

addedge(ll u,ll v)

2329 inline void

dfs(ll t,ll pre)

3041

}42 sum+=(cnt[t]-1)*(n-cnt[t])+n-1;43

if(sum&1) ans^=val[t];44}

45int

main()

4649

for(ll i=1;i<=n;++i) val[i]=read();

50 dfs(1,0

);51 printf("

%lld\n

",ans);

52return

0;

53 }

view code

牛客練習賽36B題

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld rabbit大學畢業後找到了乙份實習工作,如果實習通過她就轉正了。實習期共有n天,其中有幾天公司集體放假,rabbit不用上班,剩下時間她可以選擇工作或者休息。rabb...

牛客練習賽4 B

思維題,把 i2 j2 ai2 aj2 絕對值符號去掉後,我們設i2 j2 ai2 aj2 j2 i2 aj2 ai2 j2 aj2 i2 ai2 或者 i2 j2 ai2 aj2 j2 i2 aj2 ai2 ai2 i2 aj2 j2 原式化簡後只有這兩種形式,那麼我們可以設定兩個陣列a n b ...

牛客練習賽69 B

題意 給定n nn個數,乙個x xx表示可以劃分成最多x xx個串,乙個y yy表示在乙個串中最多選擇y yy個數。最後求 i 1x j 1yv al i j sum x sum yval i,j i 1x j 1 y va l i,j v al i,j val i,j val i,j 為 將n n...