摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
回家 ★☆☆☆☆ 答案正确 100 2015-7-20 19:13:12

代码

1079.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<set>
  5. #include<queue>
  6. #include<cstring>
  7. #include<climits>
  8. #include<cmath>
  9. using namespace std;
  10. #define lld long long
  11. queue<char> p;
  12. vector< pair<char,int> > L[256]={};
  13. int Dis[256]={};
  14. #define foreach(i,a) for(typeof(a.begin()) i=a.begin();i!=a.end();++i)
  15. int main(){
  16. int n;
  17. cin>>n;
  18. memset(Dis,7,sizeof(Dis));//设置初值为很大的值//
  19. int Ans=INT_MAX;char Ansc;
  20. for(int i=1;i<=n;++i)
  21. {
  22. char f,t;int d;
  23. cin>>f>>t>>d;
  24. //新建路径//
  25. L[f].push_back( make_pair(t,d) );
  26. L[t].push_back( make_pair(f,d) );
  27. }
  28. p.push('Z');
  29. Dis['Z']=0;
  30. //SPFA//
  31. while(!p.empty())//队列非空//
  32. {
  33. foreach(i,L[p.front()])//遍历//
  34. {
  35. if(Dis[p.front()]+i->second<Dis[i->first])//判断Dis是否更优//
  36. {
  37. Dis[i->first]=Dis[p.front()]+i->second;//更新目标点并入队//
  38. p.push(i->first);
  39. if(isupper(i->first))//统计Ans//
  40. {
  41. if(Dis[i->first]<Ans)
  42. {
  43. Ans=Dis[i->first];
  44. Ansc=i->first;
  45. }
  46. }
  47. }
  48. }
  49. p.pop();
  50. }
  51. cout<<Ansc<<" "<<Ans;
  52. }

著作权声明[编辑]

关于[编辑]