分析:水題
每次安裝的時候和根節點求lca的過程中區間覆蓋+區間查詢
每次刪除的時候查詢子樹中安裝的數量+區間覆蓋
附上**:
#include #include #include #include #include #include #include using namespace std;#define n 100005
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
struct node
e[n<<1];
int head[n],cnt,dep[n],fa[n],anc[n],siz[n],son[n],sum[n<<2],cov[n<<2],n,q,idx[n],tims;
char s[20];
void add(int x,int y)
void dfs1(int x,int from)
}void build(int l,int r,int rt)
int m=(l+r)>>1;
build(lson);
build(rson);
pushup(rt);
}void update(int l,int r,int c,int l,int r,int rt)
pushdown(rt,r-l+1);
int m=(l+r)>>1;
if(m>=l)update(l,r,c,lson);
if(m>1,ret=0;
if(m>=l)ret+=query(l,r,lson);
if(mreturn ret;
}int install(int x)
return ret;
}int uninstall(int x)
int main()
dfs1(1,0);
dfs2(1,1);
scanf("%d",&q);
while(q--)
else
}return 0;
}
noi2015軟體包管理器
你決定設計你自己的軟體包管理器。不可避免的,你要解決軟體包之間的依賴關係。如果a依賴b,那麼安裝a之前需安裝b,解除安裝b之前須解除安裝a。0號軟體包不依賴任何軟體包。依賴關係不存在環 包括自環 你的任務是,求出每次安裝 刪除操作會改變多少個包的狀態。安裝乙個已安裝的軟體包,或者解除安裝乙個未安裝的...
Noi2015 軟體包管理器
time limit 10 sec memory limit 512 mb 你決定設計你自己的軟體包管理器。不可避免地,你要解決軟體包之間的依賴問題。如果軟體包a依賴軟體包b,那麼安裝軟體包a以前,必須先安裝軟體包b。同時,如果想要解除安裝軟體包b,則必須解除安裝軟體包a。現在你已經獲得了所有的軟體...
NOI2015 軟體包管理器
樹鏈剖分維護。1表示安裝的狀態,0表示沒有安裝的狀態。如果install就是把當前點到根的所有點都變成1,然後計算前後的 delta 如果uninstall呢,就是把自己的子樹變成0,答案也是前後的 delta 具體可以參照 不過我的 常數好大啊,跑得好慢。如下 include include in...