stl-map-pair
2017-04-13 00:31
441 查看
#include<iostream> //#include<bits/stdc++.h> #include<map> #include<vector> #include<cmath> #include<cstring> #include<cstdio> using namespace std; typedef long long LL; struct node { LL x,y; }; map<pair<LL,LL>,LL>pq;//用来一对一 map<LL,pair<LL,LL> >to;//用来一对一 vector< pair<LL,LL> >c; pair<LL,LL>p1,p2,st,st1; double dis[300][300]; double f(pair<LL,LL> u,pair<LL,LL> v) { return sqrt((u.first-v.first)*(u.first-v.first)+(u.second-v.second)*(u.second-v.second)); } int main() { LL stx,sty,enx,eny,cn=1; memset(dis,0,sizeof(dis)); while(cin>>stx>>sty>>enx>>eny) { pq.clear();to.clear(); p1.first=stx,p1.second=sty; if(pq[p1]==0) {pq[p1]=cn++;to[cn-1]=p1;}st=p1; p2.first=enx,p2.second=eny; if(pq[p2]==0) {pq[p2]=cn++;st1=p2;to[cn-1]=p2;} LL x,y; while(cin>>x>>y) { if(x==-1&&y==-1) { for(LL i=1;i<c.size();i++) { dis[pq[c[i-1]]][pq[c[i]]]=dis[pq[c[i]]][pq[c[i-1]]]=f(c[i-1],c[i])*6/4000; } c.clear(); continue; } p1.first=x,p1.second=y; if(pq[p1]==0) {pq[p1]=cn++;to[cn-1]=p1;} c.push_back(p1); } for(LL i=1;i<cn;i++) for(LL j=1;j<cn;j++) if(dis[i][j]==0.0) { dis[i][j]=dis[j][i]=f(to[i],to[j])*6/1000; } for(LL k=1;k<cn;k++) for(LL i=1;i<cn;i++) for(LL j=1;j<cn;j++) if(dis[i][k]+dis[k][j]<dis[i][j]) {dis[i][j]=dis[i][k]+dis[k][j];} printf("%.0f\n",dis[pq[st]][pq[st1]]); } return 0; }Subway
相关文章推荐
- c++ STL 之map 和 pair
- STL中的模板类pair 和map
- STL中的模板类pair 和map http://blog.csdn.net/calvin_zcx/article/details/6072286
- STL之关联容器(pair、map、set的使用)
- stl-map stl-pair
- Codeforces Round #377 (Div. 2) E. Sockets(map,pair,STL)
- STL中的模板类pair 和map
- stl之pair,map,vector区别
- stl : map 插入相同key组成的make_pair, 结果是插入不进去, 不是覆盖
- STL的pair学习, map学习
- STL之关联容器(pair、map、set的使用)
- STL笔记:map and pair
- STL 之 pair 和map
- POJ 3297 Open Source STL(map+set+pair)
- c++之STL之pair,map
- C++学习STL之关联容器 --- pair、map、set
- HDU 4287 Intelligent IME(string,map,stl,make_pair)
- STL中map, list, and pair的学习笔记
- 巧妙地利用STL map set pair 贪心+排序 Codeforces Round #331 (Div. 2)C. Wilbur and Points
- std::map key=std::pair