運輸計畫sol

2022-07-22 06:42:18 字數 1745 閱讀 3475

運輸計畫

最小化最大值問題,考慮用二分答案

check中一般用貪心策略

將每條路徑的長度預處理,對二分的ans,將長度比ans大的取出來

並找出這些路徑是否有一條重邊使得最長的路徑減了這條邊後小於ans

注意dfs中引數少一點會更快,將dfs中訪問順序存到陣列中,在每次check時不要再次dfs

陣列要開大一點。。

#include#define fi first

#define se second

#define pb push_back

#define mp make_pair

#define sz(x) ((int)x.size())

#define all(x) x.begin(),x.end()

#define u(i,u) for(register ll i=head[u];i;i=nxt[i])

#define rep(i,a,b) for(register ll i=(a);i<=(b);++i)

#define per(i,a,b) for(register ll i=(a);i>=(b);--i)

using namespace std;

typedef long double ld;

typedef long long ll;

typedef unsigned int ui;

typedef pairpii;

typedef vectorvi;

templateinline void read(t &x)

while(isdigit(c))x*=f;

}templateinline void cmin(t &x, t y)

const int n=1000100;

ll n,m,head[n],nxt[n],v[n],cnt,uu[n],vi[n],li[n],anc[n][24];

ll w[n],su,mx,mxx,mi=9999999999,s[n],dep[n];

ll num[n],ct;

ll vis[n],tmp;

inline void add(ll x,ll y,ll z)

inline void dfs(ll now,ll d)

}inline void init()

}inline void swim(ll &x,ll h)

}inline ll lca(ll x,ll y)

} return anc[x][0];

}inline bool check(ll an)

} if(!tmp)return 1;

per(i,n,2)vis[anc[num[i]][0]]+=vis[num[i]];

rep(i,1,n)if(vis[i]>=tmp&&mx-(s[i]-s[anc[i][0]])<=an)return 1;

return 0;

}int main()

init();rep(i,1,m)

rep(i,1,m)

ll l=0,r=su,mid;

while(r-l>=3)

for(ll i=l;i<=r;i++)

} return 0;}/*

6 3

1 2 3

1 6 4

3 1 7

4 3 12

3 5 5

3 6

2 5

4 5*/

Luogu 運輸計畫

inline 神奇的東西 最好戒掉吧 read 除外 這道題將求解性問題轉化為判定性問題,當然就是二分答案了 二分刪掉邊後最短路徑的最大值 mid 將所有的比mid大的詢問求交集 樹上差分,cnt s cnt t cnt lca s,t 2 最後統計每個節點以及該節點的子樹的cnt的和,若 和 比m...

運輸計畫noip

靠!這道題tm搞了我好幾天,真是煩死人!早上打了乙個倍增的tm只有95分qaq。然後一氣之下開始不斷卡常,各種玄學優化,可是就是t。tat。可惡!晚上我就直接打了個tarjan,還好跑過了,可是打的我身心俱殘!彷彿想起了打splay的歲月,各個 3000 不過一次就打成功了,還算比較好吧。先上95分...

noip2015 運輸計畫

公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道連通了 l 國的所有星球。小 p 掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如 有一艘物流飛船需要從 ui 號星球沿最快的宇航路徑飛行到 vi 號星球去...