題目:
奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j-能有
若t名(可能沒有)下線,除1名大頭日外其餘n-1名情報員有且僅有1名上線。奈特公司紀律森嚴,每
名情報員只能與自己的上、下線聯絡,同時,情報網路中仟意兩名情報員一定能夠通過情報網路傳遞情報。
奈特公司每天會派發以下兩種任務中的乙個任務:
1.蒐集情報:指派t號情報員蒐集情報
2.傳遞情報:將一條情報從x號情報員傳遞給y號情報員
情報員最初處於潛伏階段,他們是相對安全的,我們認為此時所有情報員的危險值為0;-旦某個情報員開
始蒐集情報,他的危險值就會持續增加,每天增加1點危險值(開始蒐集情報的當天危險值仍為0,第2天
危險值為1,第3天危險值為2,以此類推)。傳遞情報並不會使情報員的危險值增加。
為了保證傳遞情報的過程相對安全,每條情報都有乙個風險控制值c。餘特公司認為,參與傳遞這條情
報的所有情報員中,危險值大於c的情報員將對該條情報構成威脅。現在,奈特公司希望知道,對於每
個傳遞情報任務,參與傳遞的情報員有多少個,其中對該條情報構成威脅的情報員有多少個。
題解:離線操作
建一棵樹上的主席樹,以時間為關鍵字。
**:
#include#includeusing namespace std;int tot,rt,t,cnt,last[1000005],ls[10000005],rs[10000005],tree[10000005],root[1000005],val[1000005],f[1000005][20],dep[1000005];
struct nodee[1000005];
struct node1q[1000005];
void add(int a,int b)
int lca(int x,int y)
if (x==y) return x;
for (int i=19; i>=0; i--)
return f[x][0];
}void dfs(int x,int fa)
}void insert(int &now,int pre,int l,int r,int x)
ls[now]=ls[pre],rs[now]=rs[pre];
int mid=(l+r)>>1;
if (x<=mid) insert(ls[now],ls[pre],l,mid,x);
else insert(rs[now],rs[pre],mid+1,r,x);
tree[now]=tree[ls[now]]+tree[rs[now]];
}void solve(int x,int fa)
}int query(int now,int l,int r,int x)
int main()
dep[rt]=1;
dfs(rt,0);
cnt=0;
scanf("%d",&t);
for (int ti=1; ti<=t; ti++)
else
} solve(rt,0);
for (int i=1; i<=tot; i++)
return 0;
}
bzoj 4448 Scoi2015 情報傳遞
description 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有 若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每 名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報員一定能夠通過情報...
BZOJ4448 Scoi2015 情報傳遞
bzoj4448 scoi2015 情報傳遞 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報...
BZOJ 4448 Scoi2015 情報傳遞
bzoj 4448 scoi2015 情報傳遞 主席樹 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有 若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每 名情報員只能與自己的上 下線聯絡,同時,情報網路...