hdu 2112 最短路+stl

很久以前做过的题,那个时候不知道为什么总是RE,现在没什么问题了,不过题目还是挺坑的,套了个实际的背景我还以为是有向边+起点终点不相同,实际上是无向边+起点终点可以相同...

  1 #include <iostream>
  2 #include <cstring>
  3 #include <string>
  4 #include <queue>
  5 #include <map>
  6 using namespace std;
  7
  8 const int INF = 99999999;
  9 const int N = 201;
 10 const int M = 20000;
 11 int head[N];
 12 int dist[N];
 13 bool visit[N];
 14 int n, m, e;
 15
 16 struct Edge
 17 {
 18     int v, next, w;
 19 } edge[M];
 20
 21 void addEdge( int u, int v, int w )
 22 {
 23     edge[e].v = v;
 24     edge[e].w = w;
 25     edge[e].next = head[u];
 26     head[u] = e++;
 27 }
 28
 29 void spfa( int s )
 30 {
 31     for ( int i = 1; i <= n; i++ )
 32     {
 33         dist[i] = INF;
 34         visit[i] = false;
 35     }
 36     dist[s] = 0;
 37     visit[s] = true;
 38     int q[N], top = 0;
 39     q[top] = s;
 40     top = ( top + 1 ) % n;
 41     for ( int i = 0; i != top; i = ( i + 1 ) % n )
 42     {
 43         int u = q[i];
 44         visit[u] = false;
 45         for ( int j = head[u]; j != -1; j = edge[j].next )
 46         {
 47             int v = edge[j].v, w = edge[j].w;
 48             if ( dist[v] > dist[u] + w )
 49             {
 50                 dist[v] = dist[u] + w;
 51                 if ( !visit[v] )
 52                 {
 53                     q[top] = v;
 54                     top = ( top + 1 ) % n;
 55                     visit[v] = true;
 56                 }
 57             }
 58         }
 59     }
 60 }
 61
 62 map<string, int> mp;
 63 string from, to;
 64
 65 int main ()
 66 {
 67     while ( cin >> m, m != -1 )
 68     {
 69         e = 0;
 70         n = 1;
 71         memset( head, -1, sizeof(head) );
 72         mp.clear();
 73         cin >> from >> to;
 74         int src = mp[from] = n++, des = src;
 75         if ( mp.count(to) == 0 )
 76         {
 77             des = mp[to] = n++;
 78         }
 79         while ( m-- )
 80         {
 81             int d;
 82             cin >> from >> to >> d;
 83             if ( mp.count(from) == 0 )
 84             {
 85                 mp[from] = n++;
 86             }
 87             if ( mp.count(to) == 0 )
 88             {
 89                 mp[to] = n++;
 90             }
 91             addEdge( mp[from], mp[to], d );
 92             addEdge( mp[to], mp[from], d );
 93         }
 94         n--;
 95         spfa(src);
 96         if ( dist[des] == INF ) dist[des] = -1;
 97         cout << dist[des] << endl;
 98     }
 99     return 0;
100 }
时间: 2024-11-02 20:45:21

hdu 2112 最短路+stl的相关文章

hdu 2112 (最短路+map)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14515    Accepted Submission(s): 3405 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发

hdu 2112 最短路

本来是拿来复习一下map的,没想搞了半天,一直wa,最后发现预处理没有处理到所有的点 就是个最短路 Sample Input 6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1 Sample

hdu 2112(最短路+字典树)

只想说  字典树必释放内存 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node { node *next[53]; int num; node (){ for(int i=0;i<=53;i++) next[i]=NULL; num=0; } }*root; int cnt; char s1[33],s2[33]; int dp[200

hdu 2112 HDU Today (最短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的时候,这里注意不能直接输出0,必须用标记,因为数据可能还没有处理完!!!此处贡献n次wa. (2)这里是某大神教我的用map进行转换,将字符串转换成数字,值得参考.map<string,int>M,V:不过这里同样是wa了好多次.要注意的是将最先输入的开始和结束的点也要放到这个map里面. (3)

hdu 2112 HDU Today 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目意思:又是求最短路的,不过结合埋字符串来考查. 受之前1004 Let the Balloon Rise 学到用map 的解法做之后,有点蠢蠢欲动,当时见到要用字典树做有点吓坏了(之前看过下,非一般难理解,所以暂时放下了).于是,死就死吧,硬住头皮用map做,反反复复修改终于过了. 首先是memory limit exceeded,因为无读清题目意思,直接开10000 * 10000的数组

HDU 2112 HDU Today (Dijkstra算法)

HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13952    Accepted Submission(s): 3264 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候

HDU 2112 HDU Today,最短路径算法,Dijkstra

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13396    Accepted Submission(s): 3144 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HD

ACM: HDU 2544 最短路-Dijkstra算法

HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据.每组数据第一行是两个整数N.M(N<=100,M<

HDU 4941 Magical Forest STL

这明明就是给纯C选手的大杀器啊. 题意:给你k坐标,表示 X,Y 有值C,有 3种操作 1) 交换A,B两行 2) 交换A,B两列 3) 询问(A,B)的值 解题思路:map离散化 解题代码: // File Name: 1007.cpp // Author: darkdream // Created Time: 2014年08月12日 星期二 21时05分18秒 #include<vector> #include<list> #include<map> #includ