1. 程式人生 > >CSU1830(資料很多時,怎麼用dijkstra演算法處理)

CSU1830(資料很多時,怎麼用dijkstra演算法處理)

轉自:http://blog.csdn.net/pei_1997/article/details/70148813

概述:忙得不行的主角要從城市1(限定)坐飛機到其他城市,為了多休息所以要儘量挑距離遠的城市飛(終點是隨意的),而且不滿足睡覺時間還不飛(兄弟你很跳啊) 這一題其實可以是說一道模板題,只不過從最短路變成了最長路,但思路是差不多的。對於我來說還是蠻好的,第一次在最短路的題目中使用了vector、佇列和pair。 其中有幾個要注意的點:1、路徑全為單向,且除了城市1以為其他城市只有一條航線可以飛入                                         2、城市數量的級別比較大,鄰接矩陣用不了,上鄰接表
                                        3、時間複雜度不用考慮,竟然給了30s,瞎搞吧?? 以下是程式碼:
  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<cstdio>
  7. usingnamespace std;  
  8. typedef pair<int,int> q;  
  9. constint maxn=100005;  
  10. constint maxn1=-1;  
  11. int d[maxn],C,M,flag1=-1,flag=-1;  
  12. struct edge  
  13. {  
  14.     int to,cost;// to為一條路徑的終點,cost為從起點到終點的消耗
  15. };  
  16. vector<edge> ax[maxn];  
  17. void djkstal()  
  18. {  
  19.     priority_queue<q> qq;//放有pair的優先佇列,由於是求最大路,直接選用預設的優先佇列即可
  20.     memset(d,maxn1,sizeof(d));  
  21.     d[1]=0;  
  22.     qq.push(q(0,1));//設定起點為1,起始距離為0
  23.     while(!qq.empty())  
  24.     {  
  25.         q temp=qq.top();  
  26.         qq.pop();  
  27.       //
  28.        //
  29.         for(int i=0;i<ax[temp.second].size();i++)  
  30.         {  
  31.             edge e = ax[temp.second][i];  
  32.             if(d[e.to]<d[temp.second]+e.cost)//比較大小
  33.             {  
  34.                 d[e.to]=d[temp.second]+e.cost;  
  35.                 if(d[e.to]>=M)  
  36.                   {  
  37.                       flag1=max(flag1,d[e.to]);//在符合條件的情況下每次比較最大值
  38.                   }  
  39.                  qq.push(q(d[e.to],e.to));  
  40.             }  
  41.         }  
  42.     }  
  43. }  
  44. int main()  
  45. {  
  46.     int T;  
  47.     cin>>T;  
  48.     while(T--)  
  49.     {   flag1=-1;  
  50.         cin>>C>>M;  
  51.         for(int i=0;i<C-1;i++)  
  52.         {  
  53.             edge e;  
  54.             int a,b,c;  
  55.             scanf("%d%d%d",&a,&b,&c);  
  56.             flag=max(flag,b);//用於設定清除vector的最大下標
  57.             e.to=b;  
  58.             e.cost=c;  
  59.             ax[a].push_back(e);  
  60.         }  
  61.         djkstal();  
  62.         cout<<flag1<<endl;  
  63.         for(int i=1;i<=flag;i++)  
  64.            ax[i].clear();  
  65.     }  


相關推薦

CSU1830資料多時怎麼dijkstra演算法處理

轉自:http://blog.csdn.net/pei_1997/article/details/70148813 概述:忙得不行的主角要從城市1(限定)坐飛機到其他城市,為了多休息所以要儘量挑距離遠的城市飛(終點是隨意的),而且不滿足睡覺時間還不飛(兄弟你很跳啊) 這

SpannableString使用注意資料重複時顯示異常問題解決

之前我寫過一篇部落格介紹SpannableString的使用。 參見 http://blog.csdn.net/u014620028/article/details/50977602 但是今天發現我說的方法裡有個bug。這裡解決一下。在這裡,感謝我的組長–

UVA11624 Fire!兩次bfs第一次預處理

題意翻譯 大火蔓延的迷宮 題目大意 你的任務是幫助Joe走出一個大火蔓延的迷宮。Joe每分鐘可以走到上下左右4個方向的相鄰格子之一,而所有著火的格子都會四周蔓延(即如果某個空格子與著火格子有公共邊,則下一分鐘這個空格子將著火)。迷宮中有一些障礙格,Joe和火都無法進入。當Joe走到一個迷宮的

這是一個非常簡單的題目意在考察你程式設計的基礎能力。千萬別想難了哦。輸入為一行包括了空格分隔的三個整數 AA、BB、CC資料範圍均在-40−40 ~ 4040 之間。輸出為一行為“A+B+CA

這是一個非常簡單的題目,意在考察你程式設計的基礎能力。千萬別想難了哦。 輸入為一行,包括了用空格分隔的三個整數 A、B、C(資料範圍均在−40 ~ 40 之間)。 輸出為一行,為“A+B+C”的計算結果。 樣例輸入 22 1 3 樣例輸出 26 import java.util.

資料結構 棧順序棧鏈式棧棧實現計算器

一、棧的概念 1. 棧是一個特殊的線性表,只能在一端操作:棧頂(top):允許操作 的一端                                                                     棧底(bottom):不允許操作的一端 2

Pytorch訓練CNN資料集MNIST使用GPU

聽說pytorch使用比TensorFlow簡單,加之pytorch現已支援windows,所以今天裝了pytorch玩玩,第一件事還是寫了個簡單的CNN在MNIST上實驗,初步體驗的確比TensorFlow方便。 參考程式碼(在莫煩python的教程程式碼基礎上修改)如下

CloudStack+KVM環境搭建步驟詳細說明ClockStack是來管理虛擬機的

環境準備 mis 選擇 pro storage dsta 初始化 部署 跳過 文章目錄環境準備配置本地域名解析關閉selinux安裝ntp服務安裝管理端安裝Mysql數據庫安裝服務端RPM:初始化CloudStack數據庫:初始化cloudstack管理服務器安裝系統虛擬機

淺析在QtWidget中自定義ModelbeginInsertRows()和endInsertRows()是空架子類似於一種信號來通知底層

cti ron 初學者 開發 http 沒有 insert ati 學習 Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接

Oracle DCL(Data Control Language)數據控制語言權限privilege角色role戶user介紹

ati nic ssi control 什麽 span remove insert ade 1、如何控制用戶訪問 1、身份驗證,認證:Authentication 2、授權:Authorization 3、審計:Audit 2、權限 數據庫安全:

HDU 1208 跳格子題經典可以有很多變形

tar where no space osi bit cpp ogre 理解 accep 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=1208 Pascal‘s Travels Time Limit: 2000/1000

Hive Shell 命令之二表中資料的操作出自Hive程式設計指南

一、 互動模式: show tables; #檢視所有表名 show tables  'ad*'  #檢視以'ad'開頭的表名 set 命令 #設定變數與檢視變數; set -v #檢視所有的變數 set hive.stats.atomic #檢視hive.sta

DML資料操作語言對錶記錄的操作-增刪改

1、插入資料 INSERT INTO 表名 (列名1,列名2,……) VALUES (列值1,列值2,……); 插入所有列 INSERT INTO stu ( number,name,age,gender ) Values( ‘itcast_0001’,‘zhang

R語言實戰--隨機產生服從不同分佈函式的資料正態分佈泊松分佈等並將資料寫入資料框儲存到硬碟

隨機產生服從不同分佈的資料 均勻分佈——runif() > x1=round(runif(100,min=80,max=100)) > x1 [1] 93 100 98 98 92 98 98 89 90 98 100 89

資料結構--C語言--圖的深度優先遍歷廣度優先遍歷拓撲排序prime演算法實現最小生成樹迪傑斯特拉演算法實現關鍵路徑和關鍵活動的求解最短路徑

實驗七  圖的深度優先遍歷(選做,驗證性實驗,4學時) 實驗目的 熟悉圖的陣列表示法和鄰接表儲存結構,掌握構造有向圖、無向圖的演算法 ,在掌握以上知識的基礎上,熟悉圖的深度優先遍歷演算法,並實現。 實驗內容 (1)圖的陣列表示法定義及

客戶端到伺服器端的通訊過程及原理清晰保證看後頓悟

  學習任何東西,我們只要搞清楚其原理,就會觸類旁通。現在結和我所學,我想總結一下客戶端到伺服器端的通訊過程。只有明白了原理,我們才會明白當我們程式開發過程中錯誤的問題會出現在那,才會更好的解決問題。     我們首先要了解一個概念性的詞彙:Socket     sock

資料多時使用單個選擇選擇不方便的問題。

在H5頁面中用js實現選擇器中資料過多時,進行分組選擇 專案中有個進行區服選擇需求,因為有些區服陣列過長,一個選擇器進行選擇需要滑動時間太久。 所以對資料先做分組處理,然後把選擇項進行分組顯示 下面是相關程式碼`//填充區服 function FillAreaService(

MySql何時MyISAM何時InnoDB不看後悔一看必懂

MySql何時用MyISAM何時用InnoDB MyISAM和InnoDB是MySQL提供的兩種搜尋引擎 MyISAM和InnoDB的區別 ①InnoDB支援事務與外來鍵和行級鎖,MyISAM不支援(最主要的差別) ②MyISAM讀效能要優於InnoDB,除了針對

高階網際網路產品經理:以資料重構商業流量改變未來!

為什麼拿到資料仍然不能做出有效的決策?很可能是因為缺少了有效的分析模型。今天分享給大家9款經典的企業戰略決策、營銷決策、服務決策的分析模型,這些模型已經過諸多成功企業和頂尖企業家、經理人的實踐驗證,被證明是能決定企業成敗,影響管理工作效率,有助於企業領導及管理者更好

OC實現猜拳遊戲2.0更簡單方法兩個物件、繼承、條件表示式、@proterty增強和點語法

/*概述:玩家和電腦出拳,贏方加分,輸的一方不加分。每一局之後詢問玩家是否繼續。 分析:物件1:玩家,同電腦。方法:被詢問時選擇出拳並輸出選擇(列舉) 物件2:電腦,屬性:姓名,出的拳頭,分數。方法:出拳,判斷輸贏(傳玩家物件)並計分。

今天做一個excel匯入資料的功能到了NPOI可是發現excel中日期格式拿到之後格式變了無法轉換成DateTime型別了

解決方法:DateTime在NPOI中的型別是Numeric ,判斷如果是Numeric 型別的話再用.Net自帶的DateUtil.IsCellDateFormatted(cell)方法判斷是否為DateTime型別,如果2個都成立,取cell的DateCellValue屬