zoukankan      html  css  js  c++  java
  • poj3255 Roadblocks

    /*
      解析可看:
      http://blog.csdn.net/arthurfree/article/details/37884463
      
      这次debug时,发现犯了个隐蔽的小错误,让我找了好久才发现...
      for (int i = 0; i < G[v].size(); i++) 
      我一开始,把这句里的v,手误打成了i,然后检查时还一直没能发现T^T
    */



    #include <iostream>
    #include <queue>
    #include <vector>
    using namespace std;
    int N, R;
    int f, t, c;
    const int MAX_N = 1e5 + 10;
    const int INF = 1e6;
    struct edge
    {
    	int to, cost;
    	edge (int t, int c)
    	{
    		to = t; cost = c;
    	}
    };
    typedef pair <int, int> P;
    vector<edge> G[MAX_N]; //图的邻接表表示
    
    int dist[MAX_N]; // 最短距离
    int dist2[MAX_N]; // 次短距离
    
    void solve()
    {
    	priority_queue<P, vector<P>, greater<P> > que;
    	fill (dist, dist + N, INF);
    	fill (dist2, dist2 + N, INF);
    	dist[0] = 0;
    	que.push( P(0,0) );
    	
    	while (!que.empty())
    	{
    		P p = que.top(); que.pop();
    		int v = p.second, d = p.first; // v为标号,d为出队的边的cost
    		if ( dist2[v] < d ) continue;
    		for (int i = 0; i < G[v].size(); i++) 
    		{
    			edge&e = G[v][i];
    			int d2 = d + e.cost;
    			if (dist[e.to] > d2) 
    			{
    				swap(dist[e.to], d2); //巧妙,一箭双雕,将判断是否更新次小值时,还要再次用到的d,一并更新,否则要写三变量交换了
    				que.push( P(dist[e.to], e.to) );
    			}
    			if (dist2[e.to] > d2 && d2 > dist[e.to])
    			{
    				dist2[e.to] = d2;
    				que.push( P(dist2[e.to], e.to) );
    			}
     		}	
    	}
    	cout << dist2[N - 1] << endl;
    }
    int main()
    {
    	cin >> N >> R;
    	for (int i = 0; i < N; i++)
    	G[i].clear();
    	
    	for (int i = 0; i < R; i++)
    	{
    //		edge now; int from;
    //		cin >> from >> now.to >> now.cost;
    //		G[from].push_back(now);
    		
    		cin >> f >> t >> c;
    		f--; t--;
    		G[f].push_back(edge(t, c));
    		G[t].push_back(edge(f, c));
    	}
    	solve();
    	return 0;
    }


  • 相关阅读:
    android修改debug keystore文件使之和正式keystore sha1一致
    scrollView中可以自由滚动的listview
    android gradle的全局管理
    OpenGL学习笔记(三)
    OpenGL学习笔记(二)
    OpenGL学习笔记(一)
    Java编程代码规范中值得留意的地方
    mac上编译Android的arm64位ffmpeg
    入门程序员必读的10本经典书单
    [Android文档翻译]设备兼容性
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789493.html
Copyright © 2011-2022 走看看