PIPI OJ 1286: PIPI运货(单源最短路径+边有权值+顶点也有权值)

2024-04-02 11:08

本文主要是介绍PIPI OJ 1286: PIPI运货(单源最短路径+边有权值+顶点也有权值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1286: PIPI运货

菜鸟生成记(16)

这又是一个单源最短路径的模板题,有一点点加强,顶点加权;

不过把模板稍改一下就可以了;

水题真的很上头,一写就停不下来;

#include<bits/stdc++.h>
using namespace std;
const int N=1e+3+10,inf=1e+8+10;
int cost[N];
int Map[N][N];
int dis[N];
int book[N];
int n;
int find()//
{int min1=inf,t=-1;for(int i=1;i<=n;i++){if(book[i]==0&&dis[i]<min1){min1=dis[i];t=i;}}return t;
}
void djk(int x,int y)
{for(int i=1;i<=n;i++)dis[i]=Map[x][i];int u=x;book[u]=1;for(int i=1;i<n;i++){u=find();book[u]=1;for(int j=1;j<=n;j++){if(book[j]==0&&dis[j]>dis[u]+Map[u][j]+cost[u])dis[j]=dis[u]+Map[u][j]+cost[u];//这里加个顶点的权值}if(u==y)//终点判断(没有这个判断会超时25%)break;//到终点直接结束}
}
int main()
{cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>Map[i][j];if(Map[i][j]==-1)Map[i][j]=inf;}}int x,y,d;for(int i=1;i<=n;i++)cin>>cost[i];cin>>d;while(d--){cin>>x>>y;djk(x,y);cout<<dis[y]<<endl;memset(dis,0,sizeof(dis));memset(book,0,sizeof(book));}return 0;
}

这篇关于PIPI OJ 1286: PIPI运货(单源最短路径+边有权值+顶点也有权值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869815

相关文章

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

poj 1502 MPI Maelstrom(单源最短路dijkstra)

题目真是长得头疼,好多生词,给跪。 没啥好说的,英语大水逼。 借助字典尝试翻译了一下,水逼直译求不喷 Description: BIT他们的超级计算机最近交货了。(定语秀了一堆词汇那就省略吧再见) Valentine McKee的研究顾问Jack Swigert,要她来测试一下这个系统。 Valentine告诉Swigert:“因为阿波罗是一个分布式共享内存的机器,所以它的内存访问

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 3790 (单源最短路dijkstra)

题意: 每条边都有长度d 和花费p,给你起点s 终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 解析: 考察对dijkstra的理解。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstrin

POJ3041 最小顶点覆盖

N*N的矩阵,有些格子有物体,每次消除一行或一列,最少要几次消灭完。 行i - >列j 连边,表示(i,j)处有物体,即 边表示 物体。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;impo

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

图的最短路径算法——《啊哈!算法》

图的实现方式 邻接矩阵法 int[][] map;// 图的邻接矩阵存储法map = new int[5][5];map[0] = new int[] {0, 1, 2, 3, 4};map[1] = new int[] {1, 0, 2, 6, 4};map[2] = new int[] {2, 999, 0, 3, 999};map[3] = new int[] {3, 7

vcpkg子包路径批量获取

获取vcpkg 子包的路径,并拼接为set(CMAKE_PREFIX_PATH “拼接路径” ) import osdef find_directories_with_subdirs(root_dir):# 构建根目录下的 "packages" 文件夹路径root_packages_dir = os.path.join(root_dir, "packages")# 如果 "packages"

OPENGL顶点数组, glDrawArrays,glDrawElements

顶点数组, glDrawArrays,glDrawElements  前两天接触OpenGL ES的时候发现里面没有了熟悉的glBegin(), glEnd(),glVertex3f()函数,取而代之的是glDrawArrays()。有问题问google,终于找到答案:因为OpenGL ES是针对嵌入式设备这些对性能要求比较高的平台,因此把很多影响性能的函数都去掉了,上述的几个函数都被移除了。接