如果乙個軟體被解除安裝,那答案就是它所有已安裝的子孫的個數;如果安裝,就是它到根的鏈上沒安裝的個數.(注意修改lazy的時候)
1 #include2 #include3 #include4 #include56using
namespace
std;78
int n,head[100001],rk[100001
],tot,p,js,js2;
9struct
kkk e[200001
];12
struct
dian q[100001
];15
struct
xianduan a[400001
];18
19 inline void add(int x,int
y) 24
25 inline void dfs1(int rt,int fa,int
deep) 37}
3839 inline void dfs2(int rt,int
topf) 50}
5152 inline void spr(int
rt)
58if(a[rt].lazy == -1
) 62 a[rt*2].lazy =a[rt].lazy;
63 a[rt*2+1].lazy =a[rt].lazy;
64 a[rt].lazy = 0;65
}6667 inline void build(int rt,int ll,int
rr)
7778 inline int ssum(int rt,int l,int
r) 91
92 inline int treeadd(int x,int
y) 100 uu += ssum(1
,q[y].id,q[x].id);
101return
uu;102
}103
104 inline void change(int rt,int l,int
r) 111
spr(rt);
112int mid = a[rt].l + a[rt].r >> 1
;113
if(l <= mid) change(rt * 2
,l,r);
114if(r > mid) change(rt * 2 + 1
,l,r);
115 a[rt].v = a[rt*2].v + a[rt*2+1
].v;
116117
}118
119 inline void treechange(int x,int
y) 126
//if(q[x].d >= q[y].d)
127 change(1
,q[y].id,q[x].id);
128}
129130 inline void change1(int rt,int l,int
r) 136
spr(rt);
137int mid = a[rt].l + a[rt].r >> 1
;138
if(l <= mid) change1(rt * 2
,l,r);
139if(r > mid) change1(rt * 2 + 1
,l,r);
140 a[rt].v = a[rt*2].v + a[rt*2+1
].v;
141//
printf("%d %d : %d\n",a[rt].l,a[rt].r,a[rt].v);
142}
143144
intmain()
153 dfs1(1,0,1
);154 tot = 0
;155 dfs2(1,1
);156 build(1,1
,n);
157 scanf("
%d",&p);
158//
for(int i = 1;i <= n; i++)
159//
printf("%d ",q[i].id);
160for(int i = 1;i <= p; i++)
171else
179}
180return0;
181 }
洛谷 P2146 NOI2015 軟體包管理器
題解原發於我的blog 首先,很明顯這是一道樹鏈剖分的題。注意到乙個軟體只會以來乙個軟體,並且不會出現環,所以每次都可以連一條 x i 的邊。當安裝乙個軟體時,就把 1 x 的路徑上所有的點的轉態變為 1 但解除安裝乙個軟體時,就把 x 及它的所有的子樹變為 0 線段樹維護即可 推薦一道樹鏈剖分的好...
P2146 NOI2015 軟體包管理器
很好的樹剖板子題 操作一 求點x到0的最短路徑 經過的結點個數 路徑上已安裝的軟體包的總個數,同時將經過的路徑上的所有點標記為已安裝。操作二 將子樹代表的那段存安裝包個數的區間清空 或者是說將其sum值賦值為0 此處為了實現標記已安裝和清空,我們用了乙個標記add add i 1 線段樹上的點i及其...
P2146 NOI2015 軟體包管理器
輸入格式 從檔案manager.in中讀入資料。輸入檔案的第1行包含1個整數n,表示軟體包的總數。軟體包從0開始編號。隨後一行包含n 1個整數,相鄰整數之間用單個空格隔開,分別表示1,2,3,n 2,n 1號軟體包依賴的軟體包的編號。接下來一行包含1個整數q,表示詢問的總數。之後q行,每行1個詢問。...