(PAT)1003. Emergency (25)
来源:互联网 发布:薛杉杉同款毛衣淘宝 编辑:程序博客网 时间:2024/06/10 19:50
#include<stdio.h>#include<string.h>#define INF 1<<10int n,m,so,ta;int cities[500+10][500+10];int teams[500+10];int dist[500+10];int byPass[500+10];int maxTeams[500+10];int difDist[500+10];bool visited[500+10];int selectMin(int n){ int minCity=-1; int minDis=INF;for(int i=0;i<n;i++){if(!visited[i]&&dist[i]<minDis){minCity=i;minDis=dist[i];}}if(minCity==-1)return -1;visited[minCity]=true; for(int i=0;i<n;i++){ if(i!=minCity) { if(cities[minCity][i]!=INF&&cities[minCity][i]+dist[minCity]<dist[i]) { dist[i]=cities[minCity][i]+dist[minCity]; difDist[i]=difDist[minCity]; maxTeams[i]=teams[i]+maxTeams[minCity]; byPass[i]=minCity; } else if(cities[minCity][i]!=INF&&cities[minCity][i]+dist[minCity]==dist[i]) { difDist[i]+=difDist[minCity]; if(maxTeams[i]<teams[i]+maxTeams[minCity])maxTeams[i]=teams[i]+maxTeams[minCity]; } }}return minCity;}void update(int minCity){}int main(){ int cityOne,cityTwo,distance;scanf("%d%d%d%d",&n,&m,&so,&ta); for(int i=0;i<n;i++) for(int j=0;j<n;j++){if(i==j)cities[i][j]=0;else cities[i][j]=INF;}for(int i=0;i<n;i++){ scanf("%d",&teams[i]); }for(int i=0;i<m;i++){scanf("%d%d%d",&cityOne,&cityTwo,&distance);cities[cityOne][cityTwo]=distance;cities[cityTwo][cityOne]=distance;}for(int i=0;i<n;i++){ if(cities[so][i]!=INF&&cities[so][i]!=0) { dist[i]=cities[so][i]; byPass[i]=so; maxTeams[i]=teams[so]+teams[i]; difDist[i]=1; }else{ byPass[i]=-1; maxTeams[i]=0; dist[i]=cities[so][i]; difDist[i]=0; } visited[i]=false;}visited[so]=true;difDist[so]=1;maxTeams[so]=teams[so];byPass[so]=so;while(true){int minDisCity=selectMin(n);if(minDisCity==-1)break;}printf("%d %d",difDist[ta],maxTeams[ta]);}
这题需要提一下的是:
1)核心步骤是Dijkstra算法。
2)增加两个矩阵分别存放最短路径的条数以及最大的teams。在更新dist矩阵的时候一并更新。
0 0
- 1003. Emergency (25)-PAT
- (PAT)1003. Emergency (25)
- PAT 1003. Emergency (25)
- PAT 1003. Emergency (25)
- [PAT]1003. Emergency (25)
- 【PAT】1003. Emergency (25)
- PAT 1003. Emergency (25)
- PAT 1003. Emergency (25)
- PAT 1003. Emergency (25)
- 【PAT】1003. Emergency (25)
- PAT 1003. Emergency (25)
- pat 1003. Emergency (25)
- PAT:1003. Emergency (25)
- PAT:1003. Emergency (25)
- 【PAT】1003. Emergency (25)
- pat 1003. Emergency (25)
- PAT 1003. Emergency (25)
- PAT --- 1003. Emergency (25)
- 从spin_lock到spin_lock_irqsave
- linux 基础
- 我可以凭借风的翅膀
- IP工具类
- 忘记ubuntu root用户密码的解决办法
- (PAT)1003. Emergency (25)
- MATLAB库函数大全
- android开发过程中使用功能性代码片段(二)
- javaScript skill
- UART和RS232/RS485的关系是什么?
- Windows远程桌面访问Ubuntu 12.04 之安装VNC
- 安卓开发第一天(笔记)
- Spring3.1新属性管理API:PropertySource、Environment、Profile
- windows+tomcat6下安装solr4.5