傳送門
寫在前面:模擬賽中ca爺卡我記憶體,暴力100變60……不過還是親學長(畢竟在我初中的時候就是學長),每次做ca爺的題都是高分……
思路:
(迄今做的最爽的樹鏈剖分)
被char哥帶著做這道題,結果耗了好久時間調好,這應該是第一次寫邊鏈剖了?與點鏈剖不同的是要處理下邊(深度大的變成入點),然後建樹時,這個入點的權值就是邊的權值(根的權值為0)。查詢時,最後l,r到同一條鏈上來,要讓l賦為l的重兒子,然後再求值(如果l,r是同乙個點就直接退出,不用賦值重兒子了,因為相同的點之間沒有路徑權值)
其他就是簡單的加標記求最大最小與總和了,這個題多一步取反操作,直接打標記,最大值最小值交換,然後最大最小與總和全部取相反數就行了
注意:讀入判斷命令要注意……
**:
#include#define inf 0x7fffffff
using namespace std;
int n,m,tot,cnt;
char ch;
int val[20010],l[20010],first[20010],pre[20010],dep[20010],siz[20010],top[20010],fa[20010],son[20010];
struct edge
e[40010];
struct node
tree[100010];
void add(int x,int y,int z)
void dfs1(int
now)
}void dfs2(int
now,int tp)
void pushdown(int
now)
void pushup(int
now)
void build(int
now,int begin,int
end)
intmid=(begin+end)>>1;
build(now
<<1,begin,mid);
build(now
<<1|1,mid+1,end);
pushup(now);
}void update(int
now,int begin,int
end,int pos,int num)
pushdown(now);
intmid=(begin+end)>>1;
if (mid>=pos) update(now
<<1,begin,mid,pos,num);
else update(now
<<1|1,mid+1,end,pos,num);
pushup(now);
}void oppo(int
now,int begin,int
end,int l,int r)
pushdown(now);
intmid=(begin+end)>>1;
if (mid>=l) oppo(now
<<1,begin,mid,l,r);
if (mid
now<<1|1,mid+1,end,l,r);
pushup(now);
}int get_max(int
now,int begin,int
end,int l,int r)
int get_min(int
now,int begin,int
end,int l,int r)
int get_sum(int
now,int begin,int
end,int l,int r)
void solve(int l,int r)
if (dep[l]>dep[r]) swap(l,r);
if (l==r)
if (ch=='i')
if (ch=='a')
}l=son[l];
if (ch=='n') oppo(1,1,cnt,l[l],l[r]);
else
if (ch=='s') ans+=get_sum(1,1,cnt,l[l],l[r]),printf("%d\n",ans);
else
if (ch=='i') minn=min(minn,get_min(1,1,cnt,l[l],l[r])),printf("%d\n",minn);
else
if (ch=='a')maxn=max(maxn,get_max(1,1,cnt,l[l],l[r])),printf("%d\n",maxn);
}main()
build(1,1,cnt);
scanf("%d",&m);
while (m--)
else
if (ch=='s') getchar(),getchar();
else
if (ch=='m') ch=getchar(),getchar();
scanf("%d%d",&x,&y);
solve(x+1,y+1);
}}
BZOJ 2157 旅遊 樹鏈剖分
ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...
BZOJ2157 旅遊 樹鏈剖分
ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...
BZOJ2157旅遊 樹鏈剖分 線段樹
ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...