hdu2112 HDU Today

來源:互聯網
上載者:User

map好像挺慢的

#include<iostream>#include<string>#include<cstdio>#include<map>#define INF 0x3f3f3f3fusing namespace std;int dis[155][155],cost[155];bool vis[155];map<string,int>list;void dijkstra(int s,int t,int len){int i,j,mini;int pos;for(i=1;i<=len;i++){vis[i]=0;cost[i]=dis[s][i];}vis[s]=1;cost[s]=0;for(i=1;i<=len-1;i++){mini=INF;pos=i;   //這一步純粹是為了保險for(j=1;j<=len;j++)if(!vis[j]&&cost[j]<mini){mini=cost[j];pos=j;}if(mini>=INF||pos==t) break;   //出發點道目的地路徑不存在或者已經找到最短路徑時就沒有必要再算下去了vis[pos]=1;for(j=1;j<=len;j++)if(!vis[j]&&cost[pos]+dis[pos][j]<cost[j])cost[j]=cost[pos]+dis[pos][j];}if(cost[t]>=INF)printf("-1\n");elseprintf("%d\n",cost[t]);}int main(){int n;string start,dest,from,to;int route;while(scanf("%d",&n)&&n!=-1){list.clear();memset(dis,0x3f,sizeof(dis));int len=1;cin>>start>>dest;while(n--){cin>>from>>to>>route;if(list.find(from)==list.end())list[from]=len++;if(list.find(to)==list.end())list[to]=len++;if(route<dis[list[from]][list[to]])   //去除萬惡的重邊dis[list[from]][list[to]]=dis[list[to]][list[from]]=route;   //路線是雙向的,題目也沒說清楚比較坑爹}if(list.find(start)==list.end()||list.find(dest)==list.end()){printf("-1\n"); continue;}dijkstra(list[start],list[dest],len-1);}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.