1. 程式人生 > >藍橋杯 安慰奶牛(最小生成樹)

藍橋杯 安慰奶牛(最小生成樹)

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。

題目分析:

    題目要求我們求得最短用時,其實就是在告訴我們每條路徑的權值需要重新處理一下,因為每經過一個節點,就必須要在此節點停留固定的時間安慰奶牛,所以我們可以知道,每條路的權值其實等於這條路的長度的2倍再加上兩端點的點權值,這樣就可以抽象出最小生成樹模型了,然後我們取節點值最小的那個充當原始節點,因為我們需要對此節點的奶牛多安慰一次。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 1005*1005;
const int inf = 1<<30;
int f[maxn];
int c[maxn],l[maxn];
struct node{
	int u,v,w;
}edge[maxn];

bool cmp(node a,node b)
{
	return a.w < b.w;
}

int find(int x)
{
	if( x == f[x])
		return x;
	else	return f[x] = find(f[x]);
 } 
 
 int kruskal(int n,int p)
 {
 	sort(edge+1,edge+p+1,cmp);
 	
 	int ans = 0;
 	int cnt =0;
 	for(int i = 1; i <= p; i++)
 	{
 		int u = edge[i].u ;
 		int v = edge[i].v ;
 		
 		int fa = find(u);
 		int fb = find(v);
 		//cout<<u<<" "<<v<<" "<<fa<<" "<<fb<<endl;
 		if(fa != fb)
 		{
 			f[fa] = fb;
 			ans = ans + edge[i].w ;
 		//	cout<<ans<<"**"<<fa<<" "<<fb<<" "<<cnt<<endl;
 			cnt++;
		 }
		 if(cnt == n-1)
		 	return ans;
	}
}
int main()
{
 	int n,p;
 	scanf("%d%d",&n,&p);
	//memset(f,0,sizeof(f));

	int mn = inf;
	for(int i = 1; i<= n; i++)
		scanf("%d",&c[i]),
		f[i] = i,
		mn = min(mn,c[i]);
	
	for(int i = 1; i <= p; i++)
	{
		int a,b,g;
		scanf("%d%d%d",&a,&b,&g);
		edge[i].u = a;
		edge[i].v = b;
		edge[i].w = g * 2+ c[a] + c[b];
	}
	
	long long counts = kruskal(n,p);
	cout<<counts+mn<<endl;
	
	return 0;
}

相關推薦

藍橋 安慰奶牛小生成樹

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。題目分析:    題目要求我們求得最短用時,其實就是在告訴我們每條路徑的權值需要重新處理一下,因為每經過一個節點,就必須要在此

安慰奶牛 (Kruskal) (小生成樹)

問題描述 Farmer John變得非常懶,他不想再繼續維護供奶牛之間供通行的道路。道路被用來連線N個牧場,牧場被連續地編號為1到N。每一個牧場都是一個奶牛的家。FJ計劃除去P條道路中儘可能多

藍橋-安慰奶牛java

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。 package com.sihai.advance; import java.util.Scanner; pub

搭橋小生成樹

namespace cin 包含 text 數據 codevs ive spa -m codevs——1002 搭橋 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 G

51nod 1640 天氣晴朗的魔法 小生成樹

sam out 生成樹 魔法 space int 與此同時 names 算法題 1640 天氣晴朗的魔法 題目來源: 原創 基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級算法題 收藏 關註 取消

小生成樹Codeforces Educational Codeforces Round 9 Magic Matrix

屬於 while 數組 write call pre rar matrix ring You‘re given a matrix A of size n?×?n. Let‘s call the matrix with nonnegative elements magic i

POJ 1789 Truck History小生成樹

++i ref n) mon 距離 live u+ -- task 題意 有n輛卡車 每輛卡車用7個字符表示 輸入n 再輸入n行字符 第i行與第j行的兩個字符串有多少個相應位置的字符不同 i與j之間的距離就是幾 求連接全部卡車的最短長度 題目不是這個意思

小鎮網小生成樹

方案 ac代碼 簡單的 int scrip 矩陣 安排 con ems Description 農民約翰被選為他們鎮的鎮長!他當中一個競選承諾就是在鎮上建立起互聯網。並連接到全部的農場。當然,他須要你的幫助。約翰已經給他的農場安排了一條快速的網絡線路。他想

POJ-3522 Slim Span小生成樹

while several oid win pro png zeros nds ber Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8633

魔法跳舞鏈 小生成樹

心得 pan 靜下心 logs sin tin ace sca != 個人心得:周測的時候心情有點悶,看到就不想去做,比完後第二天拿著一做,這麽簡單,我也是醉了。 雖然最後一周了,但是我還是希望你能穩住別被其他事擾亂軍心了,希望以後的你能夠靜下心去思考。 這題:就是用Kru

BZOJ 1626 [Usaco2007 Dec]Building Roads 修建道路:kruskal小生成樹

push_back spa pri family sca iostream 長度 con end 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=1626 題意:   有n個農場,坐標為(x[i],y[i])。   

POJ 3723 Conscription小生成樹

protect pic print script ++ have pac been algo Windy has a country, and he wants to build an army to protect his country. He has picked u

圖的基本算法小生成樹

原理 kruskal view cmp visit 針對 ems 科學家 -m 假設以下情景,有一塊木板。板上釘上了一些釘子。這些釘子能夠由一些細繩連接起來。假設每一

【Usaco2008 Oct】灌水 小生成樹

算法 操作 while 進行 題目 nbsp IT farm ostream 題目描述 Farmer John已經決定把水灌到他的n(1<=n<=300)塊農田,農田被數字1到n標記。把一塊土地進行灌水有兩種方法,從其他農田飲水,或者這塊土地建造水庫。 建造一

Uva1395 POJ3522 Slim Span 小生成樹

weight ever scanf rac search tip sin ica algo Description Given an undirected weighted graph G, you should find one of spanning tree

FZU 2254 英語考試 小生成樹

ecb 組成 In sta 路徑 不同 class LG open 在過三個禮拜,YellowStar有一場專業英語考試,因此它必須著手開始復習。 這天,YellowStar準備了n個需要背的單詞,每個單詞的長度均為m。 YellowSatr準備采用聯想記憶法來背誦這n個

北大 ACM highways問題研究小生成樹

after www www. number man AD with nes nbsp 問題描述 Highways Time Limit: 1000MS Memory Limit: 65536K Description The isla

還是暢通工程小生成樹

names cst ace 測試 選擇 using 遞歸 brush string.h Description 省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。經

uvaLive7303 Aquarium 小生成樹

stage nbsp urn \n 上下 uva style pri cmp 題意:給R*C的房間,每個房間被左上-右下或右上-左下的墻分割為兩個小房間,將分割移除有一定花費,問使所有小房間聯通需要的最小花費 把每個房間分成左右(上下?)兩個點,判一判,本來就聯通的加零邊,

prim算法小生成樹

operator const top scan node names name prim算法 最短路 其實prim算法和dijkstra算法差不多,不過迪傑斯特拉是算從 s->t 的最短路徑,而prim是算連接全圖的最短路徑 兩者都是從一個起點開始進行廣搜 但克魯斯卡