Hdu Oj 2112 HDU Today
2015-08-20 10:45
330 查看
题目:点击打开链接
代码:
代码:
#include<stdio.h> #include<string.h> #include<algorithm> #include<string> #include<queue> #include<map> #define INF 0x3f3f3f3f using namespace std; struct Edge { int from,to,value,next; }edge[20005]; int head[155],num; int d[155],used[155]; char str1[35],str2[35]; void init() { num=0; memset(head,-1,sizeof(head)); } void add(int a,int b,int c) { edge[num].from=a; edge[num].to=b; edge[num].value=c; edge[num].next=head[a]; head[a]=num++; } void spfa(int n) { queue<int>q; for(int i=1;i<=n;i++)//小优化 { d[i]=INF; used[i]=0; } d[1]=0; used[1]=1; q.push(1); while(!q.empty()) { int u=q.front(); q.pop(); used[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].to; if(d[v]>d[u]+edge[i].value) { d[v]=d[u]+edge[i].value; if(!used[v]) { used[v]=1; q.push(v); } } } } } int main() { int m; while(scanf("%d",&m),m!=-1) { getchar(); init(); int i,j; int flag=0; map<string,int>mp; mp.clear(); scanf("%s%s",str1,str2); if(strcmp(str1,str2)) flag=1; mp[str1]=1; mp[str2]=2; int count =3,c; for(i=0;i<m;i++) { getchar(); scanf("%s%s%d",str1,str2,&c); if(!mp[str1]) mp[str1]=count++; if(!mp[str2]) mp[str2]=count++; add(mp[str1],mp[str2],c); add(mp[str2],mp[str1],c); } if(!flag) { printf("0\n"); } else//小优化 { spfa(count-1); if(d[2]==INF) printf("-1\n"); else printf("%d\n",d[2]); } } return 0; }
相关文章推荐
- Android操作HTTP实现与服务器通信
- 好炫的Lambda表达式,Java党用起来!(最简易Lambda教程)
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
- 如何转换一些常见的文档格式
- HDU 2520 我是菜鸟,我怕谁
- 设计模式学习之--工厂模式
- PHP 数组运算符
- (二)设计模式之UML六大关系
- 如何在120行内实现一个有协程并支持tbus的服务器框架
- js -- 捆绑
- struts第一讲为什么有struts和工作原理i
- Mongodb安装 for linux
- java 调用ant的自定义task,默认不是build.xml 的一点问题
- Search a 2D Matrix
- hdu1010 Tempter of the Bone(DFS+剪枝)
- Python条件语句
- php设计模式之原型模式
- QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置
- solr4.2增量索引之同步(修改,删除,新增)--转载
- Android(java)学习笔记180:Android MediaPlayer 播放prepareAsync called in state 8解决办法