hdu 2112 HDU Today
来源:互联网 发布:索隆 知乎 编辑:程序博客网 时间:2024/06/04 18:45
这道题目最多只有150个点。。
所以floyd可以跑
#include<cstdio>#include<map>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<queue>#include<iostream>using namespace std;int ways[200][200];string start,fin;map<string,int>way;int main(){ int n; while(cin>>n) { if(n==-1) break; way.clear(); int cnt=1; cin>>start>>fin; int flag=0; way[start]=cnt; if(start!=fin) { cnt++; way[fin]=cnt; } else { flag=1; } start.clear(); fin.clear(); int num1,num2; int much; memset(ways,0x3f3f3f3f,sizeof(ways)); for(int i=0;i<n;i++) { cin>>start>>fin; if(!way[start]) { cnt++; way[start]=cnt; num1=cnt; } else { num1=way[start]; } if(!way[fin]) { cnt++; way[fin]=cnt; num2=cnt; } else { num2=way[fin]; } cin>>much; ways[num1][num2]=much; ways[num2][num1]=much; } for(int k=1;k<=cnt;k++) { for(int i=1;i<=cnt;i++) { for(int j=1;j<=cnt;j++) { ways[i][j]=min(ways[i][j],ways[i][k]+ways[k][j]); } } } if(flag) { cout<<'0'<<endl; } else if(ways[1][2]==0x3f3f3f3f) { cout<<"-1"<<endl; } else { cout<<ways[1][2]<<endl; } } return 0;}
当然,标准的做法是djstl
#include<cstdio>#include<cstring>#include<iostream>#include<map>#include<vector>#include<algorithm>#include<string>#include<cstring>#include<queue>using namespace std;int cnt;string start,fin;map<string,int>way;struct sb{ int x; int t; sb(int a,int b) { x=a; t=b; } bool operator<(const sb&wakaka)const { return t>wakaka.t; }};vector<sb>ways[160];int ts[160];bool city[160];void djstl(int who){ for(int i=1;i<=cnt;i++) { ts[i]=0x3f3f3f3f; city[i]=false; } ts[who]=0; priority_queue<sb>q; q.push(sb(who,ts[who])); while(!q.empty()) { sb x=q.top(); q.pop(); if(city[x.x]) { continue; } city[x.x]=true; for(int i=0;i<ways[x.x].size();i++) { sb y=ways[x.x][i]; if(ts[y.x]>x.t+y.t) { ts[y.x]=x.t+y.t; q.push(sb(y.x,ts[y.x])); } } }}int main(){ int n; while(cin>>n&&n!=-1) { cnt=1; int flag=0; way.clear(); cin>>start>>fin; way[start]=cnt; if(start==fin) { flag=1; } else { cnt++; way[fin]=cnt; } int num1,num2,t; while(n--) { cin>>start>>fin; if(!way[start]) { cnt++; way[start]=cnt; num1=cnt; } else { num1=way[start]; } if(!way[fin]) { cnt++; way[fin]=cnt; num2=cnt; } else { num2=way[fin]; } cin>>t; ways[num1].push_back(sb(num2,t)); ways[num2].push_back(sb(num1,t)); } djstl(1); if(flag) { cout<<'0'<<endl; } else if(ts[2]==0x3f3f3f3f) { cout<<"-1"<<endl; } else { cout<<ts[2]<<endl; } for(int i=0;i<=cnt;i++) { ways[i].clear(); } } return 0;}
我这里优先队列优化了一下。。
两种时间差不多也是醉。。。
0 0
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- Hdu-2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 hdu today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112:HDU Today
- Android在Activity中启动一个新进程报错:Can't create handler inside thread that has not called Looper.prepare()。
- 对照Java学习Swift--属性 (Properties)
- JNI 实战全面解析
- JAVA中运算符
- C++实现字符串反转
- hdu 2112 HDU Today
- DDOS反攻击措施
- Java自定义协议报文封装 添加Crc32校验
- 内联函数和宏定义的区别
- 4.30
- xUtils开源库导入AS失败,换成导入xUtils3开源库
- HTML5移动端meta标签中viewpoint简介
- Android 网络请求方法
- [LeetCode]Next Permutation下一个排列问题