http://poj.org/problem?id=1125

來源:互聯網
上載者:User

裸的最短路徑問題,這應該是以前的一道月賽題,一開始用floyd寫的,這次用spfa+優先隊列最佳化,還有存圖的方式和以前不同。。。

題意:求出在哪個點發起謠言,傳到每個人的所用的時間最少,以每個點為源點枚舉求最短路。。。。

#include<iostream>#include<algorithm>#include<string.h>#include<vector>#include<queue>#define N 105#define inf 0xfffffusing namespace std;struct Gnode{Gnode() {}Gnode(int num,int time):num(num),time(time) {}int num,time;bool operator<(const Gnode &now) const{return now.time<time;}};int dis[N];void SPFA(vector<vector<Gnode> >&Graph,int start){priority_queue<int> Q;dis[start]=0;Q.push(start);while(!Q.empty()){int cur=Q.top(); Q.pop(); for(int i=0;i<Graph[cur].size();++i) { if(dis[cur]!=inf&&dis[cur]+Graph[cur][i].time<dis[Graph[cur][i].num]) {  dis[Graph[cur][i].num]=dis[cur]+Graph[cur][i].time; Q.push(Graph[cur][i].num); } }}}void init(){for(int i=0;i<N;++i)dis[i]=inf;}int main(){int n;while(cin>>n&&n){vector<vector<Gnode> >Graph (n+1);for(int i=1;i<=n;++i){int num;cin>>num;for(int j=0;j!=num;++j){int a,b;cin>>a>>b;Graph[i].push_back(Gnode(a,b));}}int minx=inf,p;for(int i=1;i<=n;++i){init();SPFA(Graph,i);int maxx=-inf;for(int j=1;j<=n;++j)maxx=max(dis[j],maxx);if(maxx<minx) {p=i;minx=maxx;}}cout<<p<<" "<<minx<<endl;}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.