1. 程式人生 > >【bzoj2180】【最小直徑生成樹】【圖的絕對中心】

【bzoj2180】【最小直徑生成樹】【圖的絕對中心】

Description

輸入一個無向圖G=(V,E),W(a,b)表示邊(a,b)之間的長度,求一棵生成樹T,使得T的直徑最小。樹的直徑即樹的最長鏈,即樹上距離最遠的兩點之間路徑長度。

Input

輸入第一行包括兩個整數N,M,分別表示點與邊的個數。 以下M行,每行3個整數X,Y,Z,描述一條無向邊(X,Y),且W(X,Y)=Z。

Output

僅一個數,即最小直徑。

Sample Input

3 3
1 2 0
2 3 1
3 1 2

Sample Output

1
[資料範圍]
0 < M < = 1000
0 < = Z < = 1000
題解:http://blog.csdn.net/crazy_ac/article/details/8816877自己去學吧。。
程式碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 210
#define INF 707406378
using namespace std;
int f[N][N],d[N][N],ans,m,n,x,y,z,p[N][N];
void floyed(){
    for (int k=1;k<=n;k++)
      for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
          if (i!=j&&j!=k&&k!=i){f[i][j]=min(f[i][j],f[i][k]+f[k][j]);}
}
void getrank(){
  for (int i=1;i<=n;i++){
    for (int j=1;j<=n;j++) p[i][j]=j;
    for (int j=1;j<n;j++)
     for (int k=j+1;k<=n;k++)
       if (f[i][p[i][j]]>f[i][p[i][k]]) swap(p[i][j],p[i][k]); 
  } 
}
void getans(){
  ans=INF;
  for (int u=1;u<=n;u++)
   for (int v=1;v<=n;v++)
    if (d[u][v]!=INF){
     ans=min(ans,min(f[u][p[u][n]]<<1,f[v][p[v][n]]<<1));int t=n; 
     for (int i=n-1;i>=1;i--)
      if (f[v][p[u][t]]<f[v][p[u][i]]){ans=min(ans,f[u][p[u][i]]+f[v][p[u][t]]+d[u][v]);t=i;}
    }
}
int main(){
   scanf("%d%d",&n,&m);memset(f,127/3,sizeof(f));memset(d,127/3,sizeof(d));
   for (int i=1;i<=n;i++) f[i][i]=d[i][i]=0;
   for (int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);f[x][y]=f[y][x]=d[x][y]=d[y][x]=z;}
   floyed();getrank();getans();
   cout<<ans<<endl; 
} 


相關推薦

bzoj2180直徑成樹絕對中心

Description 輸入一個無向圖G=(V,E),W(a,b)表示邊(a,b)之間的長度,求一棵生成樹T,使得T的直徑最小。樹的直徑即樹的最長鏈,即樹上距離最遠的兩點之間路徑長度。 Input

BZOJ2395Balkan 2011Timeismoney 乘積成樹

imei 處理 最小乘積 一個 答案 轉化 每一個 兩個 。。 兩個屬性 考慮化成二維平面的點 每一個方案對應二維平面上的一個點(t,c) 答案一定在下凸殼上 先找到t,c的最小生成樹點A,B這兩者一定在凸包上 連線AB,找下面距離AB最遠點C 即CA CB叉積最小(註意帶

BOI2011timeismoney (乘積成樹)

Description NetLine 公司想要給N 個城鎮提供寬頻網路。為此,需要建造一個有N -1 條鎮間寬頻連結的網路,擁有一條訊息能在這個網路上從任意鎮傳到任意鎮的性質。NetLine 已經鑑定了所有城鎮對之間能夠直接建立的連結。對於每個這樣的可能連結

bzoj2180: 直徑成樹

思路:先列舉圖的絕對中心在哪條邊(u,v)上,絕對中心就是到最遠點的距離最近的點,可以在邊上 設絕對中心到該邊一個端點的距離為x 然後每個圖中的s點到它的距離就會是關於x的函式 即min(dis[u

[直徑成樹 模板題] BZOJ 2180 直徑成樹 & BZOJ 2182 [Spoj1479] TGK & Ural 1569 Networking the “Iset”

我不會啊 老老實實去學吧 求圖的絕對中心 && 最小直徑生成樹 MDST 絕對重心呢 就是列舉每一條邊 然後從這條邊上某個座標 到所有點的最小距離是一條折線 然後用這一組折線亂搞

乘積成樹 bzoj2395

         bzoj2395          以前聽基哥講的時候就沒怎麼懂,以為好難寫好難寫    //  其實不難寫,只是有點難調。          利用數形結合的思想,每棵生成樹在座標系上對應的是點(sigma(a),sigma(b)), 那麼,最小乘積生成

乘積成樹詳解BZOJ2395

題意:設每個點有x,y兩個權值,求一棵生成樹,使得sigma(x[i])*sigma(y[i])最小。 設每棵生成樹為座標系上的一個點,sigma(x[i])為橫座標,sigma(y[i])為縱座標。 則問題轉化為求一個點,使得xy=k最小。即,使過這個點的反比例函

poj1639,uva1537,uvalive2099,scu1622,fzu1761 Picnic Planning (限制成樹)

during hal {} rri 細節 xxx 找到 cred eth Picnic Planning Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10742 Accepted:

uva(11354) 瓶頸成樹+LCA

ini ace scanf nbsp pri size esp 最小 bool 求出最小生成樹後lca找最大權即可 #include<cstdio>#include<algorithm>#include<cstring>using nam

二維乘積成樹學習小記

轉化 div 求解 idt pla 學習 right log inf Preface   對於形如給定一些邊,其邊權為xi和yi,構造一個生成樹,使得   我們稱這棵樹,為最小乘積生成樹。我們可以考慮,沿用最小生成樹的思想,把這種新穎的最小生成樹做對。 Conte

邊權大差成樹

更新 第一次 然而 sort 還要 ima 右移 我們 一個 最小生成樹十分簡單,想求最大邊權最小的一個數。我們利用樹的性質和單調性,維護所有節點的父節點(剛開始的時候弄成自己)和一個當前用於建樹的邊數sum。先sort把所有邊按邊權從小到大排序,然後向

kruskal (瓶頸成樹)poj 1861

Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the company

[bzo2395][乘積成樹]Timeismoney

Description 有n個城市(編號從0…n-1),m條公路(雙向的),從中選擇n-1條邊,使得任意的兩個城市能夠連通,一條邊需要的c的費用和t的時間,定義一個方案的權值v=n-1條邊的費用和*n-1條邊的時間和,你的任務是求一個方案使得v最小 Input

Out of Hay (瓶頸成樹

【題意】 有N個農場,它們是連通的,現在你要從1號農場找到路走到其他所有農場去.但是有個要求就是你必須使得你將要走的單段路的最大長度最小.也就是說 任意兩個農場之間的路如果被你選中要走的話,那麼這種單段路的最大值必須儘量小. 【思路】 最小瓶頸生成樹

bzoj 2395 [Balkan 2011]Timeismoney——乘積成樹

題目:https://www.lydsy.com/JudgeOnline/problem.php?id=2395 如果把 \( \sum t \) 作為 x 座標,\( \sum c \) 作為 y 座標,則每棵生成樹都是二維平面上的一個點。 答案是二維平面上的一個下凸殼。先求出只考慮 t 的最小生成樹和

貪心演算法--耗費成樹(Prim演算法)

   給一個含權連通無向圖G=(V,E),V={1,2,3,...n};找出最小生成樹.實現程式碼如下:#include <stdio.h> #define M 7 #define MAX

邊權差值成樹

題目p1223 https://www.luogu.org/problemnew/show/P4234 程式碼 小資料版 使用Kruskal演算法的評測結果: https://www.luogu.org/recordnew/show/15314074 //小資料版 已

HDU 2489 Minimal Ratio Tree (比例成樹

題目連結 For a tree, which nodes and edges are all weighted, the ratio of it is calculated according to the following equation.    Given

演算法之路--代價成樹

前言 一個無向連通圖的生成樹是極小連通子圖 這句話是在我學習演算法設計的時候看到的,當時學了很多什麼無向連同有向連同的,具體的我也記不清了,記得上次說要整理演算法模組的,一直沒時間整理,

成樹費用成樹以及Kruskal演算法

Spanning Tree --生成樹    生成樹是一種特殊通路,在實際應用中具有廣泛意義。 比如:將道路網表示一個圖,則生成樹就表示從某地出發,到達所有其他各地且不繞圈子的直達路徑,就是不經過同一