因為這幾次考試中的倍增孤都掛了,而且發現自己倍增打得比較少,所以用一篇隨筆來水
再學習。
直接開題:
洛谷 p1967【貨車運輸】
題意:給定一張圖,每條邊上有限重,有q個詢問,每個詢問求x到y的最大運輸重量。
開局思路暴力?一看範圍……
算了吧,要是孤還想活著就別這麼打……
我們再看一下,也就是說x到y中間有很多道路,我們要求出這些道路最小值的最大值。
不妨先考慮如何保證最大,我們可以從中選出一些邊,保證聯通的情況下有最小值的最大值
誒,好像就是要構一棵最大生成樹,再跑lca就可以啦(畢竟暴跳就會tle啊)
上**:
#includeusingnamespace
std;
inline
intread()
while(x!=eof&&x>='
0'&&x<='
9')
return w*f;
}int n,m,num_edge,fa[200001][21],w[200001][21
],q;
struct edge line[200001
];int head[50001],f[200001],vis[200001],dep[200001
];struct tree edge[200001
];inline
bool cmp(edge a,edge b)
inline
int find(int x)
inline
void add(int
from,int to,int
dis)
void dfs(int
pos)
}inline
int lca(int x,int
y)
if(x==y) return
ans;
for(int i=20;i>=0;i--)
if(fa[x][i]!=fa[y][i])
ans=min(ans,min(w[x][0],w[y][0
]));
return
ans;
}int
main()
for(int i=1;i<=n;i++)
if(!vis[i])
for(int j=1;j<=20;j++)
for(int i=1;i<=n;i++)
q=read();
for(int i=1;i<=q;i++)
}
學習筆記 lca 倍增
求一棵樹上兩個節點的最近公共祖先有兩種演算法 tarjan 離線 這篇博文只介紹倍增的寫法.f i j 表示節點 i 的祖先中,與節點 i 距離為 2 j 的節點編號.那麼 f i j beginroot i root father i j 0,i not root f i j f f i j 1 ...
《學習筆記》 倍增 lca
例題 codevs 2370 小機房的樹 簡單來說就是給你乙個n個點的樹,每一條邊都有邊權。詢問有m次,每次給出兩個點,求他們之間的最小邊權和。很容易想到用求樹上字首和和lca,先把兩個點跳到高度相同的地方,再一直往上跳,直到兩個點重合。因為乙個點乙個點的跳太慢了,所以我們倍增的跳來求lca。令f ...
MyBatis加強學習筆記
通過定義resultmap來實現結果集自動封裝到指定物件並返回結果的一種對映方式 resultmap 節點 result 普通列,association 用於一對一關係對映,collection 用於一對多關係對映,也稱為懶載入,在查詢時先載入主資訊,在需要時才查詢從資訊。實現懶載入有以下三點需要注...