先求最大生成樹,把一些多餘的邊去掉
求最近公共祖先lca 可用樹上倍增的方法 (tarjan好像也行不知道會不會超時
詢問前處理
w[i][j]=min(w[f[i][j-1]][j-1],w[i][j-1])
最後對於詢問的x,y返回ans
ans=min(ans,w[i][j])(w[i][j]在x,y到lca(x,y)路徑上)
可能有一點點玄學,具體看**就清楚 更玄學 啦~
#include
.h>
using namespace std;
typedef long long ll;
const int n
=10005
,inf=
0x3f3f3f3f
;struct e
edge[
50005];
struct treeedge2[
100050];
int n,m,tot=
0,p,head[n]
,t;int fa[n]
,f[n][
21],w[n][
21],d[n];
int read()
while
(ch>=
'0'&&ch<=
'9')
return sum*f;
}bool comp
(e a,
e b)
int find
(int x)
void
add(int x,int y,int z)
void
kruskal()
}void
dfs(int x)
}int lca
(int x,int y)
if(x==y)
return ans;
for(int i=t;i>=
0;i--)}
ans=
min(ans,
min(w[x][0
],w[y][0
]));
return ans;
}void
init()
}for
(int i=
1;i<=t;i++
)for
(int j=
1;j<=n;j++)}
int main()
sort
(edge+
1,edge+m+
1,comp)
;kruskal()
;init()
; p=
read()
;for
(int i=
1;i<=p;i++
)return0;
}
火車運輸 NOIP 2013 提高組 Day 1
本題 kruskal 倍增lca wa了三次 t t 總結出一些注意事項 1.一定要想明白每一部分是求最大值還是最小值!wa 1 2.注意操作順序,別把要用的變數的數值改沒!wa 2 3.仔細看題,如本題讓 貨車不能到達目的地,輸出 1 而貨車載重為零則應輸出0!wa 3 include inclu...
NOIP2013提高組 花匠
花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...
NOIP2013提高組解析
題目描述 轉圈遊戲 火柴排隊 貨車運輸 積木大賽 花匠 華容道day1 轉圈遊戲 最終位置實際上就是 x m 10 k n 快速冪即可。include includeusing namespace std int n,m,k,x int power int k int main 火柴排隊 根據感覺可...