洛谷P1967 題解 貨車運輸

2022-05-16 11:31:24 字數 1488 閱讀 9279

題目

這道題讓我們求最小限重的最大值

顯然可以先求出最大生成樹,然後在樹上進行操作

因為如果兩點之間有多條路徑的話一定會走最大的,而其他小的路徑是不會被走的

然後考慮求最小權值

可以採用倍增求lca,預處理時順便把最小權值求出來

code:

1 #include2

#define io4 10000+10

3#define debug cout<<"error"<4

using

namespace

std;

5int

n,m,q,cnt,cntt;6//

原圖 7

struct

edge e[10*io4];

10 inline void ade(int u,int v,int

w)15 inline bool

cmp(edge a,edge b)

18//

最大生成樹

19struct

edget te[2*io4];

22int

head[io4];

23 inline void adte(int u,int v,int

w)29

//並查集

30int

fa[io4];

31int fd(int

x)34

//kruskal演算法

35 inline void

solve_mst()50}

51//

搜尋 52

int f[io4][25],minw[io4][25

],vis[io4],dep[io4];

53void dfs(int

x)64}65

//預處理

66 inline void

init()73}

74for(int l=1;l<=20;l++)81}

82}83//

倍增求lca(以下都是常規操作)

84 inline int solve_lca(int x,int

y)94}95

if(x==y)return

ans;

96for(int l=20;l>=0;l--)

102}

103//

由於跳到lca下面所以再取一步

104 ans=min(ans,min(minw[x][0],minw[y][0

]));

105return

ans;

106}

107108

intmain()

116solve_mst();

117init();

118 cin>>q;

119for(int i=1;i<=q;i++)

124return

0;//

完結撒花

125 }

洛谷 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...