网站页面优化方法,个人网站推广手段有哪些,网址服务器查询,wordpress主题无法删除作为一个城市的应急救援队伍的负责人#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候#xff0c;你的任务是带领你的…作为一个城市的应急救援队伍的负责人你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候你的任务是带领你的救援队尽快赶往事发地同时一路上召集尽可能多的救援队。
输入格式:
输入第一行给出4个正整数N、M、S、D其中N2≤N≤500是城市的个数顺便假设城市的编号为0 ~ (N−1)M是快速道路的条数S是出发地的城市编号D是目的地的城市编号。
第二行给出N个正整数其中第i个数是第i个城市的救援队的数目数字间以空格分隔。随后的M行中每行给出一条快速道路的信息分别是城市1、城市2、快速道路的长度中间用空格分开数字均为整数且不超过500。输入保证救援可行且最优解唯一。
输出格式:
第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔输出结尾不能有多余空格。
输入样例:
4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2输出样例:
2 60
0 1 3
#includeiostream
#includecstring
using namespace std;
const int N550;
int teams[N];//第i个城市的救援队的数目;
int con[N][N];//连接两个城市
bool vis[N];//判断
int dist[N];//最短路径距离
int cnt[N];//最短路径条数
int maxv_num[N];//最多救援队数目
int path[N];//路径
int n,m,s,d;
void dijkstra()
{memset(dist,0x3f,sizeof dist);dist[s]0;maxv_num[s]teams[s];path[s]-1;for(int i0;in;i){int k-1;for(int j0;jn;j){if(!vis[j](k-1||dist[j]dist[k]))kj;}vis[k]1;for(int j0;jn;j){if(!vis[j]dist[j]dist[k]con[k][j]){dist[j]dist[k]con[k][j];cnt[j]cnt[k];maxv_num[j]maxv_num[k]teams[j];path[j]k;}else if(!vis[j]dist[j]dist[k]con[k][j]){cnt[j]cnt[k];if(maxv_num[j]maxv_num[k]teams[j]){maxv_num[j]maxv_num[k]teams[j];path[j]k;}}}}
}
void print(int x)
{if(path[x]-1) return ;print(path[x]);cout x;
}
int main()
{cinnmsd;memset(con,0x3f,sizeof con);for(int i0;in;i) cinteams[i],cnt[i]1;for(int i0;im;i){int x,y,z;cinxyz;con[x][y]z;con[y][x]z;}dijkstra();coutcnt[d] maxv_num[d]endl;couts;print(d);return 0;
}