UVA908[Re-connecting Computer Sites]題解

来源:https://www.cnblogs.com/bookerbug/archive/2023/08/27/17659994.html
-Advertisement-
Play Games

[原題](https://www.luogu.com.cn/problem/UVA908) ## 1.題意分析 題意就是給你很多組數,對於每組數,有三組小數據。第一組小數據先輸入一個n表示頂點數,然後再輸入n-1條邊表示初始邊數。其它組小數據先輸入一個數k,表示增加的邊的數量,然後再輸入k條邊,表示 ...


原題

1.題意分析

題意就是給你很多組數,對於每組數,有三組小數據。第一組小數據先輸入一個n表示頂點數,然後再輸入n-1條邊表示初始邊數。其它組小數據先輸入一個數k,表示增加的邊的數量,然後再輸入k條邊,表示增加的邊。在輸入第二組小數據時,要先把邊清空,重新輸入,但是邊的數量不變。

2.做法

題意不難理解,說白了就是最小生成樹的板子題。很明顯,對於每組數,可以分為兩組大數據。第一組小數據是一組大數據;第二組和第三組小數據可以分為一組大數據。對於每組大數據,求出最小生成樹,再把數據清空,再求一遍。就是最終的正解了

3.關於最小生成樹

板子

板子題原題

kruskal最小生成樹演算法的詳細分析

註意輸入的換行,換行卡了我10分鐘

它終於來了

代碼

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e5 + 100;

int parents[N];

struct edge
{
	int from, to, val;
}edges[N];

bool cmp(edge a, edge b)
{
	if(a.val != b.val)
	{
		return a.val < b.val;
	}else
	{
		return a.from > b.from;
	}
	return a.to > b.to;
}

int cnt = 0;
void add(int u, int v, int w)
{
	cnt++;
	edges[cnt].from = u;
	edges[cnt].to = v;
	edges[cnt].val = w;
}

int Find(int n)
{
	int last_find = n;
	while(true)
	{
		if(parents[n] == n || parents[n] == last_find)
		{
			return n;
		}
		last_find = n;
		n = parents[n];
	}
}

int kruskal(edge* edges, int points, int bian)
{
	int w = 0;
	int cur_cnt = 0;
	int ans = 0;
	sort(edges + 1, edges + bian + 1, cmp);
	while(cur_cnt < points-1)
	{
		w++;
		int node_1 = Find(edges[w].from);
		int node_2 = Find(edges[w].to);
		if(node_1 != node_2)
		{
			parents[Find(node_1)] = parents[Find(node_2)];
			ans += edges[w].val;
			cur_cnt++;
		}
//		cout << cur_cnt << " " << w << endl;
//		cout << ans << endl;
	}
	return ans;
}

void init(int n)
{
	cnt = 0;
	for(int i = 1;i <= n;i++)
	{
		parents[i] = i;
	}
}

int main()
{
	int ccnntt=0;
	int n;
	while(cin >> n)
	{
		if(ccnntt!=0){
			cout<<endl;
		}
		ccnntt++;
		init(n);
		for(int i = 1;i < n;i++)
		{
			int u, v, w;
			cin >> u >> v >> w;
			add(u, v, w);
		}
		cout << kruskal(edges, n, n - 1) << endl;
		
		init(n);
		int k;
		cin >> k;
		for(int i = 1;i <= k;i++)
		{
			int u, v, w;
			cin >> u >> v >> w;
			add(u, v, w);
		}
		int m;
		cin >> m;
		for(int i = 1;i <= m;i++)
		{
			int u, v, w;
			cin >> u >> v >> w;
			add(u, v, w);
		}
		cout << kruskal(edges, n, k + m) << endl;
	}
	
	return 0;	
} 

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

-Advertisement-
Play Games
更多相關文章
  • [系列文章目錄和關於我](https://www.cnblogs.com/cuzzz/p/16609728.html) ## 零丶引入 在[Netty源碼學習2——NioEventLoop的執行](https://www.cnblogs.com/cuzzz/p/17641482.html)中,我們學 ...
  • ## 1.1 註釋 **作用**:在代碼中加一些說明和解釋,方便自己或其他程式員程式員閱讀代碼 **兩種格式** 1. **單行註釋**:`// 描述信息` - 通常放在一行代碼的上方,或者一條語句的末尾,==對該行代碼說明== 2. **多行註釋**: `/* 描述信息 */` - 通常放在一段代 ...
  • ## 1 拉取鏡像 指定版本,在git查看相應版本,參考: https://github.com/openzipkin/zipkin 如2.21.7 ```bash docker pull openzipkin/zipkin:2.21.7 ``` ## 2 啟動 Zipkin預設埠為9411。啟動 ...
  • # Nacos集群搭建 # 1.集群結構圖 官方給出的Nacos集群圖: ![image-20210409210621117](https://img2023.cnblogs.com/blog/3014273/202308/3014273-20230827184442168-301140741.pn ...
  • 最近github上發現了一個庫(`plottable`),可以用簡單的方式就設置出花哨的 `DataFrame` 樣式。 github上的地址:[https://github.com/znstrider/plottable](https://github.com/znstrider/plottabl ...
  • Kafka 是一個基於發佈-訂閱模式的消息系統,它可以在多個生產者和消費者之間傳遞大量的數據。Kafka 的一個顯著特點是它的高吞吐率,即每秒可以處理百萬級別的消息。那麼 Kafka 是如何實現這樣高得性能呢?本文將從七個方面來分析 Kafka 的速度優勢。 - 零拷貝技術 - 僅可追加日誌結構 - ...
  • 在 gRPC 中使用 JWT(JSON Web Tokens)進行身份驗證是一種常見的做法,它可以幫助你確保請求方的身份和許可權。下麵是一種使用 gRPC 和 JWT 進行身份驗證的步驟: 1. **生成和簽發 JWT:** 在用戶登錄成功後,你需要生成一個 JWT 並將其簽發給用戶。JWT 中可以包 ...
  • 最近接觸到了 [github.com/json-iterator/go](https://github.com/json-iterator/go) , 是由滴滴開源的第三方json編碼庫,它同時提供Go和Java兩個版本。 > 文中大量內容來自 github 上的 wiki 文檔,有興趣的朋友可以直 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...