PAT 1003. Emergency (25)
来源:互联网 发布:用友软件云南代理商 编辑:程序博客网 时间:2024/05/23 00:58
#include<vector>#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cctype>#include<cmath>#include<cstdlib>#include<queue>#include<map>#include<stack>using namespace std;#define INF 100000000#define min(a,b) a<b?a:bstruct djst{int index;int length;};void Dijkstra(vector<djst> a[],int c1,int c2,int n,int c[]){ int path[500]; int dist[500]; int visit[500]={0}; stack<int> q;int save[500]; for(int i=0;i<n;i++) { dist[i]=INF; save[i]=c[i]; } for(int i=0;i<a[c1].size();i++) dist[a[c1][i].index]=a[c1][i].length; q.push(c1); int t; int j=0; int past=dist[c2]; dist[c1]=0; save[c1]=c[c1]; int way=0; int min1=INF; int max1=0; int pre=0; while(!q.empty()) { t=q.top(); q.pop(); if(!q.empty()&&q.top()==-1)//当把一个点的相连路径都遍历过时将其变为可用 { if(t!=c1) visit[t]=0; q.pop(); continue; } if(t!=c2) {visit[t]=1; } else if(t==c2) { if(dist[c2]<min1) { min1=dist[c2]; way=1; max1=save[c2]; } else if(dist[c2]==min1&&dist[c2]!=INF) { way++; if(save[c2]>max1) max1=save[c2]; } if(!q.empty()) { dist[c2]=past; save[c2]=c[c2]; visit[c1]=1; } continue; } for(int i=0;i<a[t].size();i++) { if(i==0&&t!=c1) { q.push(-1); q.push(t); } if(dist[t]+a[t][i].length<dist[a[t][i].index]&&!visit[a[t][i].index]) { dist[a[t][i].index]=dist[t]+a[t][i].length; save[a[t][i].index]=save[t]+c[a[t][i].index]; q.push(a[t][i].index); } else if(dist[t]+a[t][i].length==dist[a[t][i].index]&&!visit[a[t][i].index]) { if(c[a[t][i].index]+save[t]>save[a[t][i].index]) save[a[t][i].index]=c[a[t][i].index]+save[t]; q.push(a[t][i].index); } } } printf("%d %d\n",way,max1);}int main(){ vector<djst> a[500]; struct djst ex; int c[500]; int n,m,c1,c2; int x,y,l; scanf("%d%d%d%d",&n,&m,&c1,&c2); for(int i=0;i<n;i++) scanf("%d",&c[i]); for(int i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&l); ex.index=y; ex.length=l; a[x].push_back(ex); ex.index=x; ex.length=l; a[y].push_back(ex); }Dijkstra(a,c1,c2,n,c); return 0;}
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)
- menu中xml中设置item
- 计算字符长度
- CANopen通信设备
- leetcode 57:Insert Interval
- 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化
- PAT 1003. Emergency (25)
- SQL基础知识2
- 欢迎使用CSDN-markdown编辑器
- 关于地震的数据的自动判断,豆豆成长日记
- 可以复制的label
- DCMTK:带有多张图片的dcm文件转成多张QImage与多张图片添加到一个dcm文件
- 第十周项目7 判断二叉树是否相似
- 高效的输入函数 --- 适用于ACM竞赛里输入数据特别多的情况
- 【JSON】parse()和stringfy()方法