首页 > 代码库 > hdu--5137--最短路
hdu--5137--最短路
理解错题意了= =
我看成bfs去做了 应该是最短路
一共1-n个点 删除 2<=i<=n-1 这些点 每次只能删除一个 问得到的最短路 最大是多少
因为直接放到优先队列 不用处理重边的情况
1 #include <iostream> 2 #include <vector> 3 #include <queue> 4 #include <utility> 5 #include <algorithm> 6 using namespace std; 7 8 int n; 9 const int size = 35;10 bool vis[size];11 vector< pair<int,int> >ve[size];12 13 int dij( int ban )14 {15 priority_queue< pair<int,int> , vector< pair<int,int> > , greater< pair<int,int> > >q;16 q.push( make_pair(0,1) ); 17 memset( vis , false , sizeof(vis) );18 vis[ban] = true;19 while( !q.empty() )20 {21 pair<int,int> now = q.top();22 q.pop();23 if( vis[now.second] )24 continue;25 vis[now.second] = true;26 if( now.second==n )27 return now.first;28 int veSize = ve[ now.second ].size();29 for( int i = 0 ; i<veSize ; i++ )30 {31 int next = ve[now.second][i].second;32 int dist = ve[now.second][i].first;33 if (!vis[next])34 {35 q.push( make_pair( dist+now.first , next) );36 }37 }38 }39 return -1;40 }41 42 int main()43 {44 cin.sync_with_stdio(false);45 int m , a , b , c , sum , ans;46 while( cin >> n >> m &&(n||m) )47 {48 for( int i = 0 ; i<=n ; i++ )49 ve[i].clear();50 for( int i = 0 ; i<m ; i++ )51 {52 cin >> a >> b >> c;53 ve[a].push_back( make_pair(c,b) );54 ve[b].push_back( make_pair(c,a) );55 } 56 ans = -1;57 for( int i = 2 ; i<=n-1 ; i++ )58 {59 sum = dij(i);60 if( sum==-1 )61 {62 ans = -1;63 break;64 }65 else66 {67 ans = max( ans , sum );68 }69 }70 if( ans==-1 )71 cout << "Inf" << endl;72 else73 cout << ans << endl;74 } 75 return 0;76 }
hdu--5137--最短路
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。