這天,bxbx
和妹子在乙個有根樹上玩遊戲。
這個有根樹有n
n個節點,編號從11到n
n,其中1
1號節點是根節點。除了1
1號節點每個節點都有乙個父親節點。第i
i個節點有權值a_ia
i。
定義s(u, v)s(
u,v)
為uu到vv
的簡單路徑上所有點的權值之和(包括uu和v
v)。bxb
x會隨機選乙個節點u
u,妹子隨機選乙個節點v
v,假設uu和v
v的lcalc
a為pp,bxbx
能獲得\max(s(u, p), s(v, p))
max(s(
u,p)
,s(v
,p))
的愉悅值。
現在你需要回答,考慮所有情況之下(n^2n
2種情況),bxbx
所獲得的愉悅值之和。
乙個節點u
u的祖先定義為從u
u一直往父親節點走若干次能到達的節點,其中u
u是自身的祖先。兩個節點的lcalc
a(最近公共祖先)定義為既是u
u的祖先,也是v
v的祖先,並且和u
u的距離最近的乙個節點。
輸入第一行包括乙個整數t
t,表示資料組數。
對於每組資料,第一行乙個整數nn。
第二行n-1n−
1個整數,第i
i個整數表示節點i+1i+
1的父親p_p
i+1
。第三行n
n個整數,第i
i個整數表示節點i的權值a_ia
i。
1 \le t \le 201≤
t≤20
2 \le n \le 1000002≤
n≤10
0000
1 \le p_ \le i, 1 \leq i \leq n - 11≤
pi+
1≤
i,1≤
i≤n−
11 \leq a_i \leq 100001≤
ai
≤10
000
對每組資料,輸出 bx 獲得的愉悅值之和。
輸入
2輸出31 1
1 2 321
1 2
289
#include#include#include#include#include#include#include#include#include#include#include//#include#include#include#includeusing namespace std;
#define ll long long
#define pii pairconst int inf = 1e9+7;
const int n = 100000 + 5;
struct edgeedge[n];
int head[n];
int a[n];
void addedge(int k,int u,int v)
ll s[n];
ll childs[n];
ll ts[n];
void dfs(int u,int sum)
}ll f(int u)
}return ans;
}ll slove(int n)
sort(s+1,s+n+1);
for(int i=1;i<=n;++i)
return ans;
}int main()
ll sub=0;
for(int i=1;i<=n;++i)
printf("%lld\n",2*slove(n)-sub);
}return 0;
}
loop和 bx 的聯合應用
計算ffff 0 ffff b單元中的資料的和,結果儲存在dx中 8086 assume cs code code segment mov ax,0ffffh mov ds,ax mov bx,0 mov dx,0 mov cx,12 s mov al,bx mov ah,0 add dx,ax i...
彙編 5 0 BX 和loop指令
1.要完整的描述乙個記憶體單元,需要兩種資訊 1.記憶體單元的位址 2.記憶體單元的長度 型別 2.表示乙個暫存器或乙個記憶體單元中的內容。如 ax 表示ax中的內容。中的元素可以有3種型別 1.暫存器名 2.段暫存器名 3.記憶體單元的實體地址 乙個20位的資料 3.約定符號idata表示常量 用...
實驗四 bx 和loop的使用
2 assume cs code code segment mov ax,0ffffh mov ds,ax mov bx,6 mov al,bx mov ah,0 mov dx,0 mov cx,3 s add dx,ax loop s mov ax,4c00h int 21hcode ends e...