給定一棵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 #include2view codeusing
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 }
牛客練習賽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...