POJ3228題解(詳細解答,希望能夠理解)

2021-10-18 16:26:51 字數 1288 閱讀 8028

poj3228題解(c++,並查集)

題幹的大致意思就是想搬運**到倉庫,跑最短的路完成搬運的任務。

給出整數n,代表城市的個數,輸入兩行,第一行代表**所在的城市以及**的數量,第二行代表倉庫所在的城市以及數量,再輸入乙個整數m,輸入m行表示,城市1和城市2之間是聯通的,距離是z。

輸出最短的路線中相鄰結點間距離最大的,output the minimum of the maximum adjacent distance,這句話搞得是一頭霧水剛開始,實在是不理解。

注意是多輸入問題,n為0結束輸入,好了以上就是題意的理解,那麼如何解決這個題目呢。

#include

#include

#include

using

namespace std;

struct nodeedge[

20001];

int p[

201]

;int

cmp(node a,node b)

intfind

(int x)

intmain()

;int store[

201]=;

int sum[

201]=;

int flag=1;

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++

)int m;

cin>>m;

for(

int i=

1;i<=m;i++

)sort

(edge+

1,edge+m+

1,cmp)

;for

(int i=

1;i<=m;i++

)for

(int k=

1;k<=i;k++)}

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++

) flag=1;

for(

int i=

1;i<=n;i++)}

if(flag==1)

}if(flag==0)

}return0;

}

這個題也是花費了好長時間沒有思路,想了最小生成樹等等,這個思路還真的是耳目一新,頗有收穫。

先將邊按從小到大的順序排序,逐漸加邊,看看是否能令這些**裝入倉庫,能的話當前的邊就是最大值。

POJ3228二分最大流

題意 有n個點,每個點有兩個權值,金子數量還有倉庫容量,金子可以存在自己的倉庫裡或者是別的倉庫裡,倉庫和倉庫之間有距離,問所有金子都必須存到庫里最大距離的最小是多少?思路 比較簡單,方法也不唯一,大體可以這樣,先二分,然後用最大流或者匹配.來判斷是不是滿足就行了,我用的是二分最大流,具體 在下面。i...

poj 3228 二分 最大流 dinic

有n座town 每座town都有一定數量gold和倉庫 倉庫的容量是有限的 有m條雙向路徑 求把所有的gold 運到倉庫最小的最大距離是多少 思路 增設乙個超級源點和乙個超級匯點,源點與每乙個gold相連,容量為gold數量,匯點與倉庫相連,容量為倉庫的容量,然後就是二分最小的最大相鄰距離,跑最大流...

POJ 3660 詳細題解分析,Floyd

題目鏈結 利用floyd求出可以連通的cow 就是可以確定大小關係 最後遍歷一遍,找與該牛可以確定大小關係的個數,為n 1即可確定rank。ac include include include include include include include using namespace std t...