Noi2015 軟體包管理器 BZOJ4196

2022-04-30 12:00:12 字數 1045 閱讀 6919

分析:水題

每次安裝的時候和根節點求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...