NOIP 2013 貨車運輸

2022-05-27 19:12:10 字數 1297 閱讀 2132

想要求貨車的最大載重量,根據木桶原理,我們就希望一條路徑上的載重量的最小值最大。讓一條路徑上的載重量的最小值最大,貪心得想,如果我加進去的每條邊都是剩餘邊中最大的那乙個,那麼在形成完整的通路時,一條路徑上的邊一定是所有情況中最大的那一種,這個思想很明顯就是最大生成樹。

lca找路徑求最小值就好了。

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int maxn=1e5+10;6

const

int inf=1e9;

7int

n,m;

8struct

edgeed[maxn];

11struct

nodepos[maxn];

14int

head[maxn],tot;

15void add(int u,int to,int

w)21

intfa[maxn];

22void

init()

25int find(int

x)29

void update(int x,int

y)33

bool

cmp(node x,node y)

36void

tree()45}

46}47int vis[maxn],dep[maxn],w[maxn][30],f[maxn][30

];48

void dfs(int

x)58}59

int lca(int x,int

y)68}69

if (x==y) return

ans;

70for (int i = 20;i>= 0;i--)76}

77 ans=min(ans,min(w[x][0],w[y][0

]));

78return

ans;79}

80int

main()

87tree();

88for (int i = 1;i <= n;i++)95}

96for (int i= 1;i <= 20;i++)

101}

102 scanf ("

%d",&q);

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

107return0;

108 }

另一道題uva11354 bond就是反過來,求最小生成樹,lca求最大值

noip2013貨車運輸

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

NOIP 2013 貨車運輸

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

NOIP 2013 貨車運輸

題目大意 給定一張無向圖 以及若干個詢問 對於每個詢問求所有由節點u到節點v的路徑上邊權的最小值的最大值。題解 首先用構造一棵最大生成樹,這樣保證樹上兩個節點路徑邊權的最小值最大 在最大生成樹上兩個節點之間只有一條路徑,所以只需要找路徑上邊權的最小值 為了快速的尋找最小值,利用樹上倍增的想法用f j...