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