某個區域網內有n(n<=100)臺計算機,由於搭建區域網時工作人員的疏忽,現在區域網內的連線形成了迴路,我們知道如果區域網形成迴路那麼資料將不停的在迴路內傳輸,造成網路卡的現象。因為連線計算機的網線本身不同,所以有一些連線不是很暢通,我們用f(i,j)表示i,j之間連線的暢通程度,f(i,j)值越小表示i,j之間連線越通暢,f(i,j)為0表示i,j之間無網線連線。
需要解決迴路問題,我們將除去一些連線,使得網路中沒有迴路,並且被除去網線的σf(i,j)最大,請求出這個最大值。
第一行兩個正整數n k
接下來的k行每行三個正整數i j m表示i,j兩台計算機之間有網線聯通,通暢程度為m。
乙個正整數,σf(i,j)的最大值
5 51 2 8
1 3 1
1 5 3
2 4 5
3 4 2
8f(i,j)<=1000
首先,我們需要了解一下有關最小生成樹的知識。
蒟蒻不理解,換一種解釋:
prim演算法或者kruskal演算法。但是一般都會使用kruskal演算法,因為它實用性更強,更加靈活,而且不用建圖。
但是在這裡我們介紹prim演算法。
prim演算法的思想和dijstra很像——都是紅白點思想。初始狀態下,除第乙個點(可以是任意乙個點)為紅點外,所有的點都是白點,每一次迴圈找出距離這個紅點最近的白點,把它變成紅點,然後再用這個點去更新其他的白點。就像這樣,直到所有的點都變成紅點。
這個題就是求被除去的長度最大,就是剩下的總長度最小,剩下的總長度就是最小生成樹的邊權和,被除去的總長度=原來總長度-最小生成樹的邊權和。
其中對memset不懂的推薦我的另一篇部落格:
具體實現請見**:
1 #include2 #include//ac**memset的標頭檔案
3using
namespace
std;
4int m[105][105],n,k,cnt1,cnt2; //
m用來存圖(鄰接矩陣存圖)
5int a[105]; //
a[i]存的是每個點到最小生成樹的最短距離
6int ok[105]; //
ok[i]存的是i這個點是否已經在最小生成樹上
7int
main()
15 memset(a,0x7f,sizeof(a)); //
先把每個點到最小生成樹的距離設定為無窮大。
16 a[1]=0; //
將點1加入最小生成樹,點1到最小生成樹的距離設定為0。
17for(int j=1;j<=n;j++)
22 ok[minn]=1; //
將白點變為紅點,加入最小生成樹
23for(int i=0;i<=n;i++)26}
27for(int i=1;i<=n;i++) cnt2+=a[i]; //
統計最小生成樹的邊權和
28 cout/
相減即為答案
29return0;
30 }
洛谷 P2820 區域網x
某個區域網內有n n 100 臺計算機,由於搭建區域網時工作人員的疏忽,現在區域網內的連線形成了迴路,我們知道如果區域網形成迴路那麼資料將不停的在迴路內傳輸,造成網路卡的現象。因為連線計算機的網線本身不同,所以有一些連線不是很暢通,我們用f i,j 表示i,j之間連線的暢通程度,f i,j 值越小表...
洛谷P2820 區域網 (最小生成樹)
某個區域網內有n n 100 臺計算機,由於搭建區域網時工作人員的疏忽,現在區域網內的連線形成了迴路,我們知道如果區域網形成迴路那麼資料將不停的在迴路內傳輸,造成網路卡的現象。因為連線計算機的網線本身不同,所以有一些連線不是很暢通,我們用f i,j 表示i,j之間連線的暢通程度,f i,j 值越小表...
2003區域網共享問題
1.開始 執行 gpedit.msc windows設定 安全設定 本地策略 使用者許可權分配 拒絕從網路訪問計算機 如果有guests就刪除 2.開始 執行 gpedit.msc windows設定 安全設定 本地策略 安全選項 帳戶 使用空白密碼的帳戶只允許控制台登入 改為 已禁用 將 網路訪問...