当前位置:网站首页>【最短路】ACwing 1127. 香甜的黄油(堆优化的dijsktra或spfa)
【最短路】ACwing 1127. 香甜的黄油(堆优化的dijsktra或spfa)
2022-07-07 09:46:00 【暮色_年华】

抽象问题:
求所有奶牛到某个点的最短距离和的最小值。
由于是双向的,可以看成从某个点到所有其他点的最短距离的最小值。
所以,可以看成是单源最短路问题,由于是稀疏图且没有负边,所以可以使用堆优化的dij或者spfa
import java.io.*;
import java.util.*;
class Main{
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static final int N=10000;
static final int INF=(int)1e8;
static int[]dist=new int[N];
static int[]h=new int[N];
static int[]ne=new int[N];
static int[]e=new int[N];
static int[]w=new int[N];
static int[]nums=new int[N];
static boolean[] st=new boolean[N];
static int idx;
static int n,p,c;
public static void add(int a,int b,int c){
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
public static void dijskra(int start){
PriorityQueue<int[]>pq=new PriorityQueue<>(p,(a,b)->a[1]-b[1]);
Arrays.fill(dist,INF);
Arrays.fill(st,false);
dist[start]=0;
pq.add(new int[]{start,0});
while(!pq.isEmpty()){
int[]cur=pq.poll();
int v=cur[0];
int d=cur[1];
if(st[v])continue;
st[v]=true;
for(int i=h[v];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>d+w[i]){
dist[j]=d+w[i];
pq.add(new int[]{j,dist[j]});
}
}
}
}
public static void main(String[] args)throws IOException{
String[] s=br.readLine().split(" ");
n=Integer.parseInt(s[0]);
p=Integer.parseInt(s[1]);
c=Integer.parseInt(s[2]);
for(int i=1;i<=n;i++){
int t=Integer.parseInt(br.readLine());
nums[t]++;
}
Arrays.fill(h,-1);
for(int i=0;i<c;i++){
s=br.readLine().split(" ");
int a=Integer.parseInt(s[0]);
int b=Integer.parseInt(s[1]);
int c=Integer.parseInt(s[2]);
add(a,b,c);
add(b,a,c);
}
int res=INF;
for(int i=1;i<=p;i++){
dijskra(i);
int sum=0;
for(int j=1;j<=p;j++){
sum+=dist[j]*nums[j];
}
res=Math.min(res,sum);
}
System.out.println(res);
}
}spfa:
import java.io.*;
import java.util.*;
class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static final int N=5000;
static final int INF=(int)1e8;
static int[]h=new int[N];
static int[]ne=new int[N];
static int[]e=new int[N];
static int[]w=new int[N];
static int[]dist=new int[N];
static boolean[]st=new boolean[N];
static int idx;
static int[]nums=new int[N];
static int n,p,c;
public static void add(int a,int b,int c){
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
public static void spfa(int start){
Arrays.fill(dist,INF);
dist[start]=0;
Queue<Integer>q=new LinkedList<>();
q.add(start);
st[start]=true;
while(!q.isEmpty()){
int cur=q.poll();
st[cur]=false;
for(int i=h[cur];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>dist[cur]+w[i]){
dist[j]=dist[cur]+w[i];
if(!st[j]){
q.add(j);
st[j]=true;
}
}
}
}
}
public static void main(String[]args)throws IOException{
String[]s=br.readLine().split(" ");
n=Integer.parseInt(s[0]);
p=Integer.parseInt(s[1]);
c=Integer.parseInt(s[2]);
for(int i=1;i<=n;i++){
int t=Integer.parseInt(br.readLine());
nums[t]++;
}
Arrays.fill(h,-1);
for(int i=0;i<c;i++){
s=br.readLine().split(" ");
int a=Integer.parseInt(s[0]);
int b=Integer.parseInt(s[1]);
int w=Integer.parseInt(s[2]);
add(a,b,w);
add(b,a,w);
}
int res=INF;
for(int i=1;i<=p;i++){
spfa(i);
int sum=0;
for(int j=1;j<=p;j++){
sum+=dist[j]*nums[j];
}
res=Math.min(res,sum);
}
System.out.println(res);
}
}边栏推荐
- What is cloud computing?
- 90后,辞职创业,说要卷死云数据库
- MIF file format record
- Design intelligent weighing system based on Huawei cloud IOT (STM32)
- Distributed database master-slave configuration (MySQL)
- RationalDMIS2022阵列工件测量
- 相机标定(2): 单目相机标定总结
- Automated testing framework
- 聊聊SOC启动(九) 为uboot 添加新的board
- 本地navicat连接liunx下的oracle报权限不足
猜你喜欢

千人规模互联网公司研发效能成功之路

LeetCode - 面试题17.24 最大子矩阵

Onedns helps college industry network security

How much do you know about excel formula?

如何在博客中添加Aplayer音乐播放器

Apprentissage comparatif non supervisé des caractéristiques visuelles par les assignations de groupes de contrôle

The database synchronization tool dbsync adds support for mongodb and es

In my limited software testing experience, a full-time summary of automation testing experience

Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist

Excel公式知多少?
随机推荐
对比学习之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
Graduation season | keep company with youth and look forward to the future together!
About how to install mysql8.0 on the cloud server (Tencent cloud here) and enable local remote connection
Verilog realizes nixie tube display driver [with source code]
聊聊SOC启动(九) 为uboot 添加新的board
核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
基于华为云IOT设计智能称重系统(STM32)
互联网协议
Technology sharing | packet capturing analysis TCP protocol
Vuthink proper installation process
Android 面试知识点
VIM命令模式与输入模式切换
浙江大学周亚金:“又破又立”的顶尖安全学者,好奇心驱动的行动派
Leetcode - interview question 17.24 maximum submatrix
audit 移植
Electron adding SQLite database
使用MeterSphere让你的测试工作持续高效
Drive HC based on de2115 development board_ SR04 ultrasonic ranging module [source code attached]
高考作文,高频提及科技那些事儿……
软件设计之——“高内聚低耦合”