151. [USACO Dec07] 建造路徑

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/23/6894502.html
-Advertisement-
Play Games

★★ 輸入文件:roads.in 輸出文件:roads.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 譯 by CmYkRgB123 描述 Farmer John 剛剛得到了幾個新農場!他想把這幾個農場用路連接起來,這樣他就可以通過筆直的公路從一個農場到另一個農場了。現在已經有了幾條連 ...


★★   輸入文件:roads.in   輸出文件:roads.out   簡單對比
時間限制:1 s   記憶體限制:128 MB

譯 by CmYkRgB123

描述

Farmer John 剛剛得到了幾個新農場!他想把這幾個農場用路連接起來,這樣他就可以通過筆直的公路從一個農場到另一個農場了。現在已經有了幾條連接著的農場。

N (1 ≤ N ≤ 1,000) 個農場中,每個農場的位置在坐標平面的 (Xi, Yi) (0 ≤ Xi ≤ 1,000,000; 0 ≤ Yi ≤ 1,000,000)。已經有 M (1 ≤ M ≤ 1,000) 條路以前就被建好了。請你幫助 Farmer John 考慮建設儘量少長度的額外的路,使他的農場連在一起。

輸入

* 第 1 行: 兩個整數: N , M
* 第 2..N+1 行: 兩個整數 Xi , Yi
* 第 N+2..N+M+2 行: 兩個整數: i , j, 表示已經存在從農場i到農場j的路。

輸出

* 第 1 行: 額外的路的最少長度,保留2小數。 請使用 64 位的浮點數。

樣例輸入

 4 1
 1 1
 3 1
 2 3
 4 3
 1 4

樣例輸出

 4.00

好久沒寫最小生成樹了結果爆了一堆bug。。

對於已經建造的道路,我們可以把它的權值設置成0

然後跑裸地kruskal

註意記憶體限制!!!!!!!!!!!

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<algorithm>
  6 #define INF 0x7ffff
  7 using namespace std;
  8 const int MAXN=1001;
  9 int vis[MAXN][MAXN];// 記錄兩個城市之間是否已經有道路相連
 10 double dis[MAXN][MAXN]; 
 11 struct node
 12 {
 13     int u,v,nxt;
 14     double w;
 15 }edge[1000001];
 16 int f[MAXN*3];
 17 int num=1;
 18 struct pos
 19 {
 20     long long int  x,y;
 21 }where[MAXN*3];
 22 int n,m;
 23 double ans=0;
 24 int read(int & n)
 25 {
 26     int flag=0,x=0;char c='/';
 27     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
 28     while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();
 29     if(flag)n=-x;
 30     else n=x;
 31 }
 32 void deal_dis()
 33 {
 34     //for(int i=1;i<=n;i++)
 35     //    for(int j=1;j<i;j++)
 36     //        dis[i][j]=INF;
 37             
 38     for(int i=1;i<=n;i++)
 39         for(int j=1;j<i;j++)
 40             dis[i][j]=sqrt((where[i].x-where[j].x)*(where[i].x-where[j].x)+(where[i].y-where[j].y)*(where[i].y-where[j].y)); 
 41 
 42     /*for(int i=1;i<=n;i++)
 43     {
 44         for(int j=1;j<i;j++)
 45             printf("%.2lf ",dis[i][j]);
 46         printf("\n");
 47     }*/
 48     //cout<<dis[219][65];
 49 }
 50 void add_edge(int p,int q,double we)
 51 {
 52     edge[num].u=p;
 53     edge[num].v=q;
 54     edge[num].w=we;
 55 //    cout<<edge[num].w<<endl;
 56     num++;
 57 }
 58 int find(int x)
 59 {
 60     if(f[x]!=x)
 61     f[x]=find(f[x]);
 62     return f[x];
 63 }
 64 int unionn(int x,int y)
 65 {
 66     int fx=find(x);
 67     int fy=find(y);
 68     f[fx]=fy;
 69 }
 70 int comp(const node & a,const node & b)
 71 {
 72     return a.w<b.w;
 73 }
 74 void kruskal()
 75 {
 76     sort(edge+1,edge+num+1,comp);
 77     int k=1;
 78     for(int i=1;i<=num;i++)
 79     {
 80         if(find(edge[i].u)!=find(edge[i].v))
 81         {
 82             unionn(edge[i].u,edge[i].v);
 83             k++;
 84             ans=ans+edge[i].w;    
 85         }
 86         if(k==n)
 87         break;
 88     }
 89     printf("%.2lf",ans);
 90 }
 91 int main()
 92 {
 93     freopen("roads.in","r",stdin);
 94     freopen("roads.out","w",stdout);
 95     read(n);read(m);
 96     for(int i=1;i<=n;i++)
 97         cin>>where[i].x>>where[i].y,f[i]=i;
 98     
 99     for(int i=1;i<=m;i++)
100     {
101         int x,y;
102         read(x);read(y);
103         add_edge(x,y,0.00);
104         vis[x][y]=1;
105     }
106     
107     deal_dis();
108     
109     for(int i=1;i<=n;i++)
110         for(int j=1;j<i;j++)
111             if(i!=j&&vis[i][j]==0)
112             add_edge(i,j,dis[i][j]);
113     
114     kruskal();
115     return 0;
116 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目鏈接 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000 ...
  • 這兩天在用python的bottle框架開發後臺管理系統,介面約定使用RESTful風格請求,前端使用jquery ajax與介面進行交互,使用POST與GET請求時都正常,而Request Method使用PUT或DELETE請求時,直接爆“HTTP Error 405: Method Not A ...
  • Django 自稱是“最適合開發有限期的完美WEB框架”。本文參考《Django web開髮指南》,快速搭建一個blog 出來,在中間涉及諸多知識點,這裡不會詳細說明,如果你是第一次接觸Django ,本文會讓你在感性上對Django有個認識,完成本文操作後會讓你有興趣閱讀的相關書籍和文檔。 本博客 ...
  • ★★ 輸入文件:dec.in 輸出文件:dec.out 簡單對比 時間限制:1 s 記憶體限制:128 MB Description 出題是一件痛苦的事情! 題目看多了也有審美疲勞,於是我捨棄了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,題目是這樣的:給出一串數以及一個數字C,要求計 ...
  • ★☆ 輸入文件:cjzd.in 輸出文件:cjzd.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 問題描述 今年是國際數學聯盟確定的“2000——世界數學年”,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的一個好朋友 ...
  • 問題描述 將整數n分成k份,且每份不能為空,任意兩種方案不能相同(不考慮順序)。 例如:n=7,k=3,下麵三種分法被認為是相同的。 1,1,5; 1,5,1; 5,1,1; 問有多少種不同的分法。 輸入:n,k (7≤n≤200,2≤k≤6) 輸出:一個整數,即不同的分法。 樣例 輸入: 7 3 ...
  • php-人員許可權管理(RBAC) 許可權管理可以想做vip的功能,普通用戶和vip用戶的功能是不一樣的,大致會用到五張表:用戶表、角色表、功能表,還有他們之間互相關聯的表:用戶與角色表、角色與功能表 我用到的五張表如下: 一.首先寫的是管理員頁面 1.用下拉列表顯示用戶名 2.因為上面已經造了新對象, ...
  • 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...