青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

TC SRM144DIV2 千分題題解

這道千分題,其實是挺有意思的一題:
提供了點(這里是junction)和點之間的距離(或代價);
要求以最短的距離(或最小代價)遍歷所有的點,同時每個點可以多次訪問;

初看之下,給人的感覺是圖論相關的問題,比如旅行者問題、歐拉環游之類。

在思考這個問題的時候,忽然間聯想到了圖論中的最小生成樹,雖然并不是真正要去得出最小生成樹,

但是按照最小生成樹所提供的思路--這點很重要--那就是圖和樹之間有著相當密切的關系:即使最小生

成樹并不能直接解決這個問題,但是它們之間存在的這層關系的確提供了解決問題的一個有益的嘗試方

向;

于是,思考進了一步,問題從“圖”簡化成了“樹”--如何把當前這個問題采用樹的結構和方法表達出

來:樹的根節點,很自然地想到了由問題中旅行的起始節點來表達;然后,隨著節點的不斷加入,樹就

自然地生成,此處的關鍵在于如何生成,或者說節點加入的規則,以及每個節點為了適應這個規則,所

必須持有的相關屬性信息:最直接的,父子節點之間的關系需要維護,從父節點到子節點的距離(或代

價)必須要保留,其次,考慮到如果每個節點都維護相關的距離(代價)信息,那么從當前節點到根節

點的代價也就可以由此遞推得出,進一步,我們所要求出的最短路徑(或最小代價)不就可以從上述這

些節點中維護的距離信息中得出嗎?這是非常關鍵的一步,它把當前我們構建的數據結構和問題的要求

之間建立起了相當直接的聯系。這說明我們目前思考的方向是有價值的而且極有可能順著這個方向前行

,可以得出相當不錯的結果。

顯然,既然要求最短路徑(最小代價),那么我們目前構建出的這顆Junction樹(因為其上的節點在題

中的物理含義是代表Junction,那這里我們就姑且稱其為Junction Tree),樹上的每個節點也應當保留

在其之下的子樹的最短路徑(最小代價),這就相當于把每個節點都作為根節點,然后求出各條子路徑

的代價,并比較得出最短路徑(最小代價),以及在這條最短路徑上的直接子節點;

每加入一個子節點,就要對上述已構建出的這些數據結構中的信息進行維護,以調整每個節點當前的最

短路徑代價和相應這條路徑上的直接子節點;當所有原“圖”中的“邊”信息,也就是

(fromJunction,toJuction,ductLength)所代表的(起始點,終止點,長度代價),都按照上述方案加入

Juction Tree之后,我們可以知道從最初的起始節點(也就是Junction Tree的根節點)到最終節點的(

Junction Tree上的某條路徑上的葉子節點)的最短(最小代價)路徑了。

對于Juction Tree這個ADT抽象數據結構的具體實現,考慮到優先隊列中二叉堆的經典實現往往使用數組

,同時也為了符合TC SRM一貫的簡捷明快的程序設計風格,我們這里同時使用幾個數組來維護前述構建

出的數據結構。

//////////////////////////////////////////////////////////////////////////////////////////

#include<cstdlib>
#include<vector>
#include<set>
using namespace std;

const int NIL = -1;
const int MAX = 50;

int Cost[MAX];
int ParentNode[MAX];
int MaxSubNode[MAX];
int MaxSubCost[MAX];

class PowerOutage
{
public:
 int estimateTimeOut(vector<int> fromJunction, vector<int> toJunction, vector<int>

ductLength)
 {
  if (!CheckParameter(fromJunction, toJunction, ductLength)) return NIL;
  
  Ini();
  int count = fromJunction.size();
  for (int i = 0; i < count; i++)
  {
   AddNode(fromJunction[i], toJunction[i], ductLength[i]);
  }
  
  return CalculateMinCost(fromJunction, toJunction, ductLength);
 }
private:
 void Ini()
 {
  memset(Cost, NIL, sizeof(int) * MAX);
  memset(ParentNode, NIL, sizeof(int) * MAX);
  memset(MaxSubNode, NIL, sizeof(int) * MAX);
  memset(MaxSubCost, 0, sizeof(int) * MAX);
 }
 
 bool CheckParameter(const vector<int>& fromJunction, const vector<int>& toJunction,

const vector<int>& ductLength)
 {
  if (fromJunction.size() != toJunction.size() || toJunction.size() !=

ductLength.size())
   return false;
  return true;
 }
 
 void AddNode(int parent, int child, int cost)
 {
  if (parent < 0 || child < 0 || cost < 0) return;
  
  Cost[child] = cost;
  ParentNode[child] = parent;
  
  int curParent = parent, curChild = child;
  bool adjustParentCost = true;
  while (adjustParentCost && curParent != NIL)
  {
   int candidateParentMaxSubCost = Cost[curChild] + MaxSubCost

[curChild];
   if (MaxSubCost[curParent] < candidateParentMaxSubCost)
   {
    MaxSubCost[curParent] = candidateParentMaxSubCost;
    MaxSubNode[curParent] = curChild;
    
    curChild = curParent;
    curParent = ParentNode[curParent];
   }
   else
   {
    adjustParentCost = false;
   }
  }
 }
 
 int CalculateMinCost(const vector<int>& fromJunction, const vector<int>&

toJunction, const vector<int>& ductLength)
 {
  int len = fromJunction.size();
  int minCost = 0;
  
  set<int> minCostPath;
  minCostPath.insert(0);
  int curNode = MaxSubNode[0];
  while(curNode != NIL)
  {
   printf("%d;",curNode); // print the min cost path
   
   minCostPath.insert(curNode);
   curNode = MaxSubNode[curNode];
  }
  
  for (int i = 0; i < len; i++)
  {
   if (minCostPath.find(toJunction[i]) == minCostPath.end())
    minCost += 2 * ductLength[i];
   else
    minCost += ductLength[i];
  }
  
  return minCost;
 }
};

posted on 2011-02-27 17:09 flagman 閱讀(1627) 評論(0)  編輯 收藏 引用 所屬分類: 算法 Algorithm數據結構 Data Structure


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩中文字幕精品| 久久久久国产精品一区二区| 欧美日韩成人精品| 欧美大片第1页| 久久久久久高潮国产精品视| 久久久噜噜噜久久久| 久久久久国产精品麻豆ai换脸| 欧美一区二区三区在线| 久久精品理论片| 久久综合伊人77777蜜臀| 欧美不卡视频| 欧美特黄一区| 国产一二三精品| 1769国产精品| a4yy欧美一区二区三区| 亚洲欧美中文另类| 久久视频精品在线| 欧美成人自拍| 一本色道久久综合亚洲精品高清| 亚洲一区二区三区在线看| 久久av一区| 欧美日韩国产综合一区二区| 国产精品夜夜夜一区二区三区尤| 国产欧美日韩激情| 亚洲国产精品视频一区| 亚洲在线观看| 欧美成人免费全部| 亚洲视频高清| 美腿丝袜亚洲色图| 国产精品日韩电影| 亚洲精品乱码久久久久久日本蜜臀 | 久久伊人亚洲| 欧美激情精品久久久久久蜜臀 | 久久一区精品| 日韩亚洲精品电影| 久色婷婷小香蕉久久| 国产精品久久激情| 最新成人av网站| 久久精品夜色噜噜亚洲a∨| 亚洲精美视频| 亚洲在线视频免费观看| 欧美成人午夜激情在线| 国内精品嫩模av私拍在线观看| 亚洲精品偷拍| 男人插女人欧美| 午夜精品久久久久99热蜜桃导演| 欧美激情综合| 亚洲国产日韩欧美在线99| 欧美尤物一区| 亚洲男人的天堂在线观看| 欧美久久视频| 99精品欧美一区二区三区| 久久综合国产精品台湾中文娱乐网| 一区二区三区高清不卡| 欧美久久电影| 999亚洲国产精| 亚洲国产欧美日韩精品| 久久久综合精品| 好吊一区二区三区| 久久久综合香蕉尹人综合网| 午夜在线观看欧美| 国产亚洲欧美一区二区| 欧美在线免费看| 亚洲欧美区自拍先锋| 国产精品久久久一本精品| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品护士| 国产精品xxxav免费视频| 亚洲视频综合| 亚洲欧美国产精品va在线观看 | 久久成人精品无人区| 国产日韩亚洲欧美综合| 久久久久久精| 欧美一区二区久久久| 在线视频你懂得一区| 国产精品日韩在线| 欧美一进一出视频| 欧美中文在线观看| 亚洲第一伊人| 99精品国产热久久91蜜凸| 国产精品亚洲激情| 久热精品在线| 国产偷国产偷亚洲高清97cao| 一区二区免费在线播放| 亚洲人在线视频| 欧美日韩午夜在线| 午夜久久黄色| 久久久国产午夜精品| 亚洲国产小视频| 在线视频免费在线观看一区二区| 国产精品久久久久影院色老大| 欧美怡红院视频| 久久免费视频这里只有精品| 久久亚洲精品中文字幕冲田杏梨| 在线免费观看成人网| 亚洲激情中文1区| 国产精品视频xxxx| 欧美电影专区| 欧美性猛交一区二区三区精品| 99亚洲视频| 国产精品久久久久久久电影| 国产精品女主播在线观看 | 欧美一区二区三区精品| 久久国产精品黑丝| 99精品视频免费| 欧美一区二区在线看| 亚洲精品久久久一区二区三区| 日韩视频不卡| 精品动漫av| 宅男噜噜噜66一区二区66| 精品88久久久久88久久久| 日韩图片一区| 91久久精品一区| 欧美一区高清| 亚洲欧美影音先锋| 欧美bbbxxxxx| 久久五月婷婷丁香社区| 欧美日韩一区二区免费视频| 久久综合五月天婷婷伊人| 欧美午夜精品久久久久久超碰| 久久综合亚州| 国产日韩高清一区二区三区在线| 亚洲国产精品999| 国产综合亚洲精品一区二| 一片黄亚洲嫩模| 亚洲精品在线观| 久久精品一二三| 欧美伊久线香蕉线新在线| 欧美视频一区二区在线观看| 一区在线视频观看| 亚洲一区欧美一区| 亚洲欧美精品| 欧美午夜一区二区福利视频| 亚洲人成网站精品片在线观看| 国产综合欧美| 久久爱www.| 久久午夜精品一区二区| 国产欧美短视频| 麻豆成人小视频| 国语自产偷拍精品视频偷| 亚洲影院一区| 欧美一区深夜视频| 国产精品久久久久免费a∨大胸 | 久久一二三四| 国产精品尤物福利片在线观看| 久久视频一区二区| 国产一区二区精品| 欧美一区精品| 久久亚洲综合色| 一区二区三区在线免费视频| 久久九九久精品国产免费直播| 欧美在线观看一二区| 国产一本一道久久香蕉| 久久久一本精品99久久精品66| 久久久综合精品| 亚洲国产一区在线| 欧美黄色免费| 亚洲一级特黄| 久久久免费观看视频| 激情综合亚洲| 欧美精品一区二区久久婷婷| 亚洲精品一二区| 亚洲欧美日韩爽爽影院| 一区二区三区国产在线| 亚洲国产视频一区二区| 一区二区久久久久| 久久经典综合| 在线成人中文字幕| 欧美激情国产日韩| 亚洲深夜影院| 麻豆精品在线观看| 亚洲人在线视频| 国产精品一区二区三区久久| 久久久久亚洲综合| 99国产精品久久久久老师| 久久九九国产精品| 日韩视频久久| 国产亚洲免费的视频看| 欧美成人黄色小视频| 亚洲欧美一区二区激情| 欧美激情一区二区在线 | 国产欧美精品| 欧美另类99xxxxx| 久久国产免费看| 在线亚洲激情| 亚洲黄色免费网站| 久久九九国产| 亚洲欧美日本精品| 亚洲欧洲免费视频| 韩国一区二区在线观看| 欧美三日本三级少妇三2023| 久久一区二区三区国产精品| 亚洲永久免费av| 亚洲无玛一区| 国产精品久久久久久久久免费樱桃| 亚洲伦理在线观看| 在线成人小视频| 国产丝袜一区二区| 国产精品久久久久免费a∨| 欧美成人性生活|