1003 Emergency (25 分)(求最短路径)
给出N个城市,m条无向边。每个城市中都有一定数目的救援小组,所有边的边权已知。现在给出起点和终点,求从起点到终点的最短路径条数及最短经上的救缓小组数目只和。如果有多条最短路径,则输出数目只和最大的
Dijkstra 做法
#include<bits/stdc++.h>
using namespace std;
int n,m,s,u;
const int N=;
const int inf=0x3f3f3f3f;
int mp[N][N];
int dis[N];
bool vis[N];
int value[N];
int num[N];
int w[N];
void Dijkstra()
{
fill(vis,vis+N,false);
fill(dis,dis+N,inf);
fill(w,w+N,);
fill(num,num+N,);
num[s]=;//赋值
w[s]=value[s];//赋值
for(int i=;i<n;i++) dis[i]=mp[s][i];
dis[s]=;
for(int i=;i<n-;i++){
int u=-;
int minn=inf;
for(int j=;j<n;j++){
if(!vis[j]&&dis[j]<minn){
u=j;
minn=dis[j];
}
}
if(u==-) return;
vis[u]=true;
for(int j=;j<n;j++){
if(!vis[j]&&dis[u]+mp[u][j]<=dis[j]){
if(mp[u][j]+dis[u]<dis[j]){
dis[j]=mp[u][j]+dis[u];
num[j]=num[u];
w[j]=w[u]+value[j];
}
else{
num[j]+=num[u];
if(w[u]+value[j]>w[j]){
w[j]=w[u]+value[j];
}
}
}
} }
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&u);
for(int i=;i<n;i++) scanf("%d",&value[i]);
memset(mp,inf,sizeof(mp));
while(m--){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
mp[a][b]=mp[b][a]=c;
}
Dijkstra();
printf("%d %d",num[u],w[u]); return ;
}
spfa做法
#include<bits/stdc++.h> using namespace std;
int n,m,s,v;
struct node
{
int to;
int dis;
node(int _to=,int _dis=):to(_to),dis(_dis){}
};
const int N=;
int dis[N];
bool vis[N];
int w[N];
int num[N];
int value[N];
vector<node>mp[N];
set<int>st[N];
const int inf=0x3f3f3f3f;
void spfa()
{
fill(dis,dis+N,inf);
fill(vis,vis+N,false);
fill(w,w+N,);
w[s]=value[s];
num[s]=;
queue<int>Q;
Q.push(s);
vis[s]=true;
dis[s]=;
while(!Q.empty()){
int u=Q.front();
Q.pop();
vis[u]=false;
for(int i=;i<mp[u].size();i++){
int to=mp[u][i].to;
int diss=mp[u][i].dis;
if(diss+dis[u]<dis[to]){
dis[to]=diss+dis[u];
w[to]=w[u]+value[to];
num[to]=num[u];
st[to].clear();
st[to].insert(u);
if(!vis[to]){
Q.push(to);
vis[to]=true;
}
}
else if(diss+dis[u]==dis[to]){
if(w[to]<w[u]+value[to]){
w[to]=w[u]+value[to];
}
st[to].insert(u);
num[to]=;//因为spfa会重复到一个点 所以可能重复的边
for(set<int>::iterator it=st[to].begin();it!=st[to].end();++it){
num[to]+=num[*it];
}
if(!vis[to]){
Q.push(to);
vis[to]=true;
}
}
}
}
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&v);
for(int i=;i<n;i++) scanf("%d",&value[i]);
for(int i=;i<n;i++) mp[i].clear();
while(m--){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
mp[a].push_back(node(b,c));
mp[b].push_back(node(a,c));
}
spfa();
printf("%d %d\n",num[v],w[v]); return ;
}
1003 Emergency (25 分)(求最短路径)的更多相关文章
- 1003 Emergency (25分) 求最短路径的数量
1003 Emergency (25分) As an emergency rescue team leader of a city, you are given a special map of ...
- PAT 1003 Emergency (25分)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- 1003 Emergency (25分)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- 【PAT甲级】1003 Emergency (25 分)(SPFA,DFS)
题意:n个点,m条双向边,每条边给出通过用时,每个点给出点上的人数,给出起点终点,求不同的最短路的数量以及最短路上最多能通过多少人.(N<=500) AAAAAccepted code: #in ...
- PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- PAT 解题报告 1003. Emergency (25)
1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...
- PAT 1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- 1003 Emergency (25)(25 point(s))
problem 1003 Emergency (25)(25 point(s)) As an emergency rescue team leader of a city, you are given ...
- PAT 甲级 1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
随机推荐
- Android学习笔记_79_ Android 使用 搜索框
1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...
- MongoDB 和 Mongoose 04
一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...
- Git错误
$ rm -rf .git $ git config --global core.autocrlf false $git init $git add . ---------------------- ...
- spring入门(六) spring mvc+mybatis
1.引入依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> < ...
- NEC 框架规范 animation
/* animation *//* 淡入 */.a-fadein{-webkit-animation-name:fadein;-moz-animation-name:fadein;-ms-animat ...
- js的事件流你真的弄明白了吗?
当浏览器发展到第四代时候,浏览器开发团队遇到了一个有意思的问题:页面的哪一部分会拥有某个特地的事件?要明白这个问题问的是什么,可以想象画在纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的不 ...
- BZOJ3277: 串(广义后缀自动机)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1196 Solved: 478[Submit][Status][Discuss] Descripti ...
- Percona-Tookit工具包之pt-index-usage
Preface There're many ways relevent with performance tuning.For example,using indexes proper ...
- Post 和 Get的区别?
Post方法: 1. POST 请求的数据不会被缓存 2. Post请求的内容放置在HTML header中,用户是看不到这个过程的.所以是比较安全的 3. Post请求的数据大小没有限制 Get方法 ...
- 中间件kafka
* kafka----一个发布订阅消息系统,中间件:一个分布式.分区.可重复的日志服务kafka需要了解基础几层结构,生产者订阅者等使用方法,和在高并发.一致性场景使用.(凡事面试问一致性.高并发都脱 ...