洛谷P1967貨車運輸

2021-08-20 19:16:21 字數 885 閱讀 1065

這道題 首先不難看出要先求乙個最大生成樹,因為我們在盡量圖聯通的情況下,使兩點之間有一條權值最大的邊,所以kru跑一遍最大生成樹;

然後會有很顯然的事情就是裸的生成樹只能求總和,但我們需要知道樹上有哪條邊,所以在合併兩個聯通塊時,將兩個端點以及他們間的邊加入另乙個圖中,那麼顯然新圖中只包含最大生成樹上的邊,然後就是求兩點之間的最長邊,乙個比較暴力的做法是floyed求任意兩點間的最長邊,但我們觀察到點數<=10000,floyed顯然不可取,那麼正解是什麼呢?

倍增lca,我們不難發現,如果兩個點聯通的話,那麼從兩個點出發,必定會交於一點,顯然這個點是他們的公共祖先,所以預處理每個點到他的祖先的最長邊,詢問時,再跑lca就可以啦

** 1400ms

//by acermo

#include#include#include#include#include#include#includeusing namespace std;

const int m=100500;

struct edge

_233;//新圖

vectorv[m];

int n,m,que;

int vis[m],deep[m],pt[m][21];

int fa[m],size[m],fatt[m][21];

int find(int x)

void unionn(int a,int b)

//加入了按秩合併以及路徑壓縮

void constt()

//初始化每個點的資訊

void kru()

//lca求解

int main()

return 0;

}

洛谷 P1967 貨車運輸

a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔開的整數 n,m,表示 a 國有 ...

洛谷 P1967 貨車運輸

題目描述 a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入輸出格式 輸入格式 輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔...

貨車運輸 洛谷p1967

解法一 30分 直接跑spfa,求最大瓶頸路。include include include define f i,l,r for i l i r i using namespace std const int maxn 10005,maxm 50005,inf 100000000 struct e...