PAT程序设计考题——甲级1003(Emergency ) C++实现
来源:互联网 发布:mac选择office安装路径 编辑:程序博客网 时间:2024/05/20 00:53
点击打开pat链接
#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
struct edge{
int end,weight;
};
struct node{
int pop;
vector<edge> bian;
};
vector<node> ad;
int w[maxn];//记录点权之和
int pre[maxn];
int vt[maxn];
vector<int> result;
int accord[maxn];//记录到到每个点最短路径的条数
bool visit[maxn]={false};
void Dji(int v,int num){
fill(vt,vt+num,INF);
fill(w,w+num,0);
fill(accord,accord+num,0);
vt[v]=0;
accord[v]=1;
w[v]=ad[v].pop;
// cout<<w[v];
for(int i=0;i<num;i++)
{
int u=-1,store=INF;
for(int j=0;j<num;j++)
{
if(vt[j]<store&&visit[j]==false){
u=j;
store=vt[j];
}
}
if(u==-1) return;
visit[u]=true;
for(int k=0;k<ad[u].bian.size();k++)
{ int z;
z=ad[u].bian[k].end;
if(visit[z]==false){
if(vt[u]+ad[u].bian[k].weight<vt[z])
{
vt[z]=vt[u]+ad[u].bian[k].weight;
accord[z]=accord[u];
w[z]=w[u]+ad[z].pop;}
else if(vt[u]+ad[u].bian[k].weight==vt[z])
{ if(w[u]+ad[z].pop>w[z])
w[z]=w[u]+ad[z].pop;
accord[z]+=accord[u]; //注意路径的写法
}
}
}
}
}
int main()
{int city,c1,c2,num;
cin>>city>>num>>c1>>c2;
int pop;
for(int i=0;i<city;i++)
{
node temp;
cin>>pop;
temp.pop = pop;
ad.push_back(temp);
}
for (int i = 0; i < num; i++)
{
int start, end, weight;
cin >> start >> end >> weight;
edge qw;
qw.end = end; qw.weight = weight;
ad[start].bian.push_back(qw);
qw.end=start;
ad[end].bian.push_back(qw);
}
Dji(c1,city);
/*for(int i=0;i<ad[4].bian.size();i++)
cout<<ad[4].bian[i].end<<" "<<ad[4].bian[i].weight<<endl;*/
cout<<accord[c2]<<" "<<w[c2];
return 0;
}
- PAT程序设计考题——甲级1003(Emergency ) C++实现
- PAT程序设计考题——甲级1065( A+B and C (64bit) ) C++实现
- PAT程序设计考题——甲级1007 (最大连续子序列和) C++实现
- PAT程序设计考题——甲级1045 (最长不下降子序列) C++实现
- PAT程序设计考题——甲级1045 (最长公共子序列) C++实现
- PAT程序设计考题——甲级1040 (最长回文串) C++实现
- PAT程序设计考题——甲级1068 (背包问题) C++实现
- PAT程序设计考题——甲级1042(洗牌机) C++实现
- PAT程序设计考题——甲级1046(循环最短距离) C++实现
- PAT程序设计考题——甲级1001( A+B Format ) C++实现
- PAT程序设计考题——甲级1002(A+B for Polynomials ) C++实现
- PAT程序设计考题——甲级1005( Spell It Right ) C++实现
- PAT程序设计考题——甲级1057( stock 分块查询) C++实现
- PAT程序设计考题——甲级1008( elevator) C++实现
- PAT程序设计考题——甲级1017(Queueing at Bank ) C++实现
- PAT程序设计考题——甲级1014( Waiting in Line ) C++实现
- PAT程序设计考题——甲级1098(Insertion or Heap Sort ) C++实现
- PAT程序设计考题——甲级1107( Social clusters并查集) C++实现
- 利用LineBasedFrameDecoder解决TCP粘包问题
- 事务安全问题及面试题
- MySQL表的检查、修复、分析和优化
- java 远程调用及动态代理的应用
- jquery实现轮播图
- PAT程序设计考题——甲级1003(Emergency ) C++实现
- 猥琐的暴搜 NOIP2011 Mayan游戏
- 线段树 hdu1698 Just a Hook
- 倍增LCA code[vs]1036商务旅行
- 线段树 洛谷P1531 I Hate It
- 平衡树之splay BZOJ3224 普通平衡树
- 树状数组 HNOI2002 营业额统计
- 树状数组 NOIP2013 火柴排队
- 最小生成树 HZOI 2016公路修建