運輸計畫
最小化最大值問題,考慮用二分答案
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 號星球去...