二分+樹上倍增
先放乙個用倍增法求解樹上距離的方法,我最開始又犯了那個錯誤
這段我最開始上下又寫反了。。。。(記性他就是不進腦子啊。。。再錯我tm是dog)
#include using namespace std;
typedef long long ll;
typedef int lint;
typedef pairpii;
typedef pairpiii;
const lint maxn = 300005;
const lint maxm = 600005;
lint he[maxn],ver[maxm],ne[maxm],tot,cost[maxm],n,m;
void init()
void add( lint x,lint y,lint w )
queueque;
lint d[maxn],f[maxn][21],dis[maxn][21];
lint build()
}if( x == y ) return x;
for( lint i = 20;i >= 0;i-- )
c += dis[x][0] + dis[y][0] ;
return f[x][0];
}vectorve;
lint val[maxn],num,res = 0;
lint dfs( lint x,lint f,lint c )
if( sum == num )
return sum;
}bool judge( lint mid )
dfs( 1,0,0 );
if( ve.back().first - res <= mid ) return true;
else return false;
}int main()
build();
//sort( ve.begin(),ve.end() );
for( lint x,y,i = 1;i <= m;i++ )
sort( ve.begin(),ve.end() );
lint l = 0;
while( l != r-1 )else
}printf("%d", r );
return 0;
}
正常求樹上距離的**
#include using namespace std;
typedef long long ll;
typedef int lint;
typedef pairpii;
typedef pairpiii;
const lint maxn = 300005;
const lint maxm = 600005;
lint he[maxn],ver[maxm],ne[maxm],tot,cost[maxm],n,m;
void init()
void add( lint x,lint y,lint w )
queueque;
lint d[maxn],f[maxn][21],dis[maxn];
lint build()
}if( x == y ) return x;
for( lint i = 20;i >= 0;i-- )
return f[x][0];
}vectorve;
lint val[maxn],num,res = 0;
lint dfs( lint x,lint f,lint c )
if( sum == num )
return sum;
}bool judge( lint mid )
dfs( 1,0,0 );
if( ve.back().first - res <= mid ) return true;
else return false;
}int main()
build();
//sort( ve.begin(),ve.end() );
for( lint x,y,i = 1;i <= m;i++ )
sort( ve.begin(),ve.end() );
lint l = 0;
while( l != r-1 )else
}printf("%d", r );
return 0;
}
Bzoj4326 運輸計畫
time limit 30 sec memory limit 128 mb submit 1091 solved 696 submit status discuss 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道...
NOIP2015 運輸計畫(bzoj4326)
time limit 30 sec memory limit 128 mb submit 886 solved 574 submit status discuss 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道連...
bzoj4326 NOIP2015 運輸計畫
題目 遙想當年初三參加時,想到了二分,想到了lca,就沒想到如何判斷,然後差20分省一23333.首先答案顯然滿足二分性質,之後判定答案。我們把長度超過k的路徑找到,找出它們公共邊中最長的,把它變為0,看是否可行。如何,找公共邊?樹鏈剖分當然可以,但太複雜了。可以把兩端標記加1,lca標記減2,之後...