P1967 貨車運輸

2021-09-26 18:19:55 字數 2102 閱讀 3335

題目

題目描述

aa國有n n座城市,編號從 1 1到 nn,城市之間有 mm 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 qq 輛貨車在運輸貨物, 司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。

輸入格式

第一行有兩個用乙個空格隔開的整數 n,mn,m,表示 aa 國有 nn 座城市和 mm 條道路。

接下來 mm行每行 3 3個整數 x, y, zx,y,z,每兩個整數之間用乙個空格隔開,表示從 x x號城市到 y y號城市有一條限重為 zz 的道路。注意: ** xx 不等於 yy,兩座城市之間可能有多條道路 ** 。

接下來一行有乙個整數 q,表示有 q 輛貨車需要運貨。

接下來 q 行,每行兩個整數 x、y,之間用乙個空格隔開,表示一輛貨車需要從 x 城市運輸貨物到 y 城市,注意: ** x 不等於 y ** 。

輸出格式

共有 qq 行,每行乙個整數,表示對於每一輛貨車,它的最大載重是多少。如果貨車不能到達目的地,輸出-1−1。

輸入輸出樣例

輸入4 3

1 2 4

2 3 3

3 1 1

31 3

1 41 3輸出3

-13說明/提示

對於 30%30%的資料,0 < n < 1,000,0 < m < 10,000,0 < q< 1,0000對於 60%60%的資料,0 < n < 1,000,0 < m < 50,000,0 < q< 1,0000對於 100%100%的資料,0 < n < 10,000,0 < m < 50,000,0 < q< 30,000,0 ≤ z ≤ 100,0000演算法最大生成樹+樹鏈剖分(邊權)

最大生成樹的演算法其實就是最小生成樹的演算法

用最大生成樹的原因:

貨車要從乙個地點到另乙個點要經過的道路應盡可能大,所以那些多餘的路徑就可以刪去,

而且樹上任意兩點可以相互到達。

接下來問題就變成了找兩點最短路徑之間邊權的最小值

驚奇地發現可以用樹鏈剖分來維護兩點間最短路徑的最短邊權。

**

#includeusing namespace std;

const int ll=5e5+5,maxn=1e5+5;

int n,m,s;

int uer[ll],ver[ll],wer[ll],f[ll],tot;

int head[ll],next[ll];

void add(int u,int v,int w)

struct lcjbian[ll];

bool cmp(lcj x,lcj y)

int get(int x)

void hb(int x,int y)

}int top[maxn],d[maxn],son[maxn],size[maxn],fa[maxn],dfn[maxn],pre[maxn],val[maxn],cnt,book[maxn];

void dfs1(int u,int f)

int getmin(int p,int l,int r)

int mid=t[p].l+t[p].r>>1,ans=99999999;

if(l<=mid) ans=min(ans,getmin(p<<1,l,r));

if(r>mid) ans=min(ans,getmin((p<<1)|1,l,r));

return ans;

}int ask(int x,int y)

int main()

for(int i=1;i<=n;i++)

if(!book[i])

dfs1(i,0);

memset(book,0,sizeof(book));

for(int i=1;i<=n;i++)

if(!book[i])

dfs2(i,i);

build(1,1,n);

scanf("%d",&s);

while(s--)

printf("%d\n",ask(x,y));

} return 0;

}

P1967 貨車運輸

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

P1967 貨車運輸

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

P1967 貨車運輸

emmmm一開始是想到網路流來著?最大流嘛233 然後發現自己好像已經差不多忘完了?於是開啟題解,ctrl f,輸入網路流,好像沒有題解,於是就老老實實想正解去了。正解 多組詢問,想想網路流也要t ek本來就慢,其它就不說了 所以一定是還有更簡單的方法的!對於每乙個點 或者說路徑 只有最小的那個邊才...