1003. Emergency (25)
来源:互联网 发布:shadowsockx for mac 编辑:程序博客网 时间:2024/04/30 04:57
题目:https://www.patest.cn/contests/pat-a-practise/1003
注意:最短路径Dijstra算法的编写
#include<cstdio>#include<algorithm>using namespace std;#define maxn 510#define INF 100000000int n,m,st,ed;int G[maxn][maxn],vis[maxn],d[maxn],num[maxn],w[maxn],weight[maxn];void Dijstra(int s){//初始化d[s] = 0;num[s] = 1;w[s] = weight[s];//n次循环for(int i=0; i<n; i++){//寻找最小值int u = -1,MIN = INF;for(int j=0; j<n; j++){if(vis[j] == false && d[j]<MIN){u = j;MIN = d[j];}}if(u == -1)return;vis[u] = true;//更新最佳for(int v=0; v<n; v++){if(vis[v] == false && G[u][v]!=INF){//全部更新if(d[u] + G[u][v] <d[v]){d[v] = d[u] + G[u][v];num[v] = num[u];w[v] = w[u]+weight[v];}else if(d[u] + G[u][v] == d[v]){num[v] += num[u];if(w[u] + weight[v] > w[v])w[v] = w[u]+weight[v];}}}}}int main(){//初始化fill(G[0],G[0]+maxn*maxn, INF);fill(vis, vis+maxn, false);fill(d, d+maxn, INF);fill(num, num+maxn, 0);fill(w, w+maxn, 0);//输入数据scanf("%d%d%d%d",&n,&m,&st,&ed);//获取权重for(int i=0; i<n; i++)scanf("%d",&weight[i]);//构造图for(int i=0; i<m; i++){int a,b,v;scanf("%d%d%d",&a,&b,&v);G[a][b] = G[b][a] = v;}//遍历图Dijstra(st);//输出结果printf("%d %d",num[ed],w[ed]);return 0;}
0 0
- 1003. Emergency (25)
- 1003. Emergency (25)-PAT
- (PAT)1003. Emergency (25)
- 1003. Emergency (25)
- 【C++】1003. Emergency (25)*
- 1003. Emergency (25)
- PAT 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- PAT 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- [PAT]1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- 为何与0xff进行与运算
- Android端公司通讯录开发与实现(一)
- 聊聊TCP三次握手和四次挥手
- 开始LeetCode算法篇,一切不晚
- 【转】五分钟理解一致性哈希算法(consistent hashing)
- 1003. Emergency (25)
- 怎么创建属于自己的库--Android Studio Gradle Jitpack
- 银联支付
- 关于Ajax的参数值中文乱码问题
- 【CSS技巧总结】
- 在Ubuntu上为Android系统编写Linux内核驱动程序
- TCP连接状态详解及TIME_WAIT过多的解决方法
- JZOJ1260.【USACO题库】2.1.4 Healthy Holsteins健康的好斯坦奶牛
- 输出0-1000的水仙花数