BZOJ1103: [POI2007]大都市meg
題解:dfs序用樹狀數組維護即可
Problem: 1103User: c20161007Language: C++Result: AcceptedTime:4872 msMemory:23832 kb ****************************************************************/#include <bits/stdc++.h> const int MAXN=4e5+10; #define ll long long using namespace std; vector<int>vec[MAXN]; ll read(){ll x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return f*x; } int fa[MAXN],dep[MAXN],num[MAXN],ans[MAXN]; int p[MAXN];int cnt; void dfs(int v,int pre,int deep){num[v]=1;ans[v]=dep[v]=deep;fa[v]=pre;p[v]=++cnt;for(int i=0;i<vec[v].size();i++){if(vec[v][i]!=pre){dfs(vec[v][i],v,deep+1);num[v]+=num[vec[v][i]];}} } int n,q; char str[11];int d[MAXN]; int get_id(int x){return x&(-x);} void add(int x,int vul){for(int i=x;i<=n+1;i+=get_id(i))d[i]+=vul; } int Sum(int x){int sum=0;for(int i=x;i>0;i-=get_id(i))sum+=d[i];return sum; } int main(){n=read();int u,v;for(int i=1;i<n;i++)u=read(),v=read(),vec[u].push_back(v),vec[v].push_back(u);dfs(1,0,0);q=read();for(int i=1;i<=q+n-1;i++){scanf(" %s",str);if(str[0]=='A'){u=read();v=read();if(dep[u]>dep[v])swap(u,v);add(p[v],1);add(p[v]+num[v],-1);}else u=read(),printf("%d\n",dep[u]-Sum(p[u]));} }?
1103: [POI2007]大都市meg
Time Limit: 10 Sec??Memory Limit: 162 MBSubmit: 3376??Solved: 1777
[Submit][Status][Discuss]
Description
在經濟全球化浪潮的影響下,習慣于漫步在清晨的鄉間小路的郵遞員Blue Mary也開始騎著摩托車傳遞郵件了。
不過,她經常回憶起以前在鄉間漫步的情景。昔日,鄉下有依次編號為1..n的n個小村莊,某些村莊之間有一些雙
向的土路。從每個村莊都恰好有一條路徑到達村莊1(即比特堡)。并且,對于每個村莊,它到比特堡的路徑恰好
只經過編號比它的編號小的村莊。另外,對于所有道路而言,它們都不在除村莊以外的其他地點相遇。在這個未開
化的地方,從來沒有過高架橋和地下鐵道。隨著時間的推移,越來越多的土路被改造成了公路。至今,Blue Mary
還清晰地記得最后一條土路被改造為公路的情景。現在,這里已經沒有土路了——所有的路都成為了公路,而昔日
的村莊已經變成了一個大都市。 Blue Mary想起了在改造期間她送信的經歷。她從比特堡出發,需要去某個村莊,
并且在兩次送信經歷的間隔期間,有某些土路被改造成了公路.現在Blue Mary需要你的幫助:計算出每次送信她需
要走過的土路數目。(對于公路,她可以騎摩托車;而對于土路,她就只好推車了。)
Input
第一行是一個數n(1 < = n < = 2 50000).以下n-1行,每行兩個整數a,b(1 < =? a以下一行包含一個整數m
(1 < = m < = 2 50000),表示Blue Mary曾經在改造期間送過m次信。以下n+m-1行,每行有兩種格式的若干信息
,表示按時間先后發生過的n+m-1次事件:若這行為 A a b(a若這行為 W a, 則表示Blue Mary曾經從比特堡送信到
村莊a。
Output
有m行,每行包含一個整數,表示對應的某次送信時經過的土路數目。
Sample Input
51 2
1 3
1 4
4 5
4
W 5
A 1 4
W 5
A 4 5
W 5
W 2
A 1 2
A 1 3
Sample Output
21
0
1
HINT
轉載于:https://www.cnblogs.com/wang9897/p/9432050.html
總結
以上是生活随笔為你收集整理的BZOJ1103: [POI2007]大都市meg的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iphone4/iphone5/ipho
- 下一篇: BSGS(模板)