当前位置:网站首页>[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
2022-07-07 11:46:00 【Twilight_ years】

Abstract problem :
Find the minimum value of the sum of the shortest distances of all cows to a certain point .
Because it's two-way , It can be regarded as the minimum value of the shortest distance from a certain point to all other points .
therefore , It can be regarded as the single source shortest path problem , Because it is a sparse graph and has no negative edges , So you can use heap optimized dij perhaps 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);
}
}边栏推荐
- In my limited software testing experience, a full-time summary of automation testing experience
- 18 basic introduction to divider separator component of fleet tutorial (tutorial includes source code)
- 深度学习秋招面试题集锦(一)
- sql里,我想设置外键,为什么出现这个问题
- 基于华为云IOT设计智能称重系统(STM32)
- 超标量处理器设计 姚永斌 第8章 指令发射 摘录
- SwiftUI 教程之如何在 2 秒内实现自动滚动功能
- 核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
- 【纹理特征提取】基于matlab局部二值模式LBP图像纹理特征提取【含Matlab源码 1931期】
- sink 消费 到 MySQL, 数据库表里面已经设置了 自增主键, flink 里面,如何 操作?
猜你喜欢

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

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

OneDNS助力高校行业网络安全

Half of the people don't know the difference between for and foreach???

Technology sharing | packet capturing analysis TCP protocol

聊聊SOC启动(十一) 内核初始化

Distributed database master-slave configuration (MySQL)

How to write test cases for test coupons?

【紋理特征提取】基於matlab局部二值模式LBP圖像紋理特征提取【含Matlab源碼 1931期】

Excel公式知多少?
随机推荐
Learning notes | data Xiaobai uses dataease to make a large data screen
sink 消费 到 MySQL, 数据库表里面已经设置了 自增主键, flink 里面,如何 操作?
Solve the problem that vscode can only open two tabs
博客搬家到知乎
對比學習之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
About the application of writing shell script JSON in JMeter
通过环境变量将 Pod 信息呈现给容器
R Language Using Image of magick package Mosaic Function and Image La fonction flatten empile plusieurs images ensemble pour former des couches empilées sur chaque autre
正在运行的Kubernetes集群想要调整Pod的网段地址
The Oracle message permission under the local Navicat connection liunx is insufficient
Case study of Jinshan API translation function based on retrofit framework
Cmu15445 (fall 2019) project 2 - hash table details
MySQL安装常见报错处理大全
超标量处理器设计 姚永斌 第8章 指令发射 摘录
Blog moved to Zhihu
0.96 inch IIC LCD driver based on stc8g1k08
VIM command mode and input mode switching
STM32 entry development NEC infrared protocol decoding (ultra low cost wireless transmission scheme)
CMU15445 (Fall 2019) 之 Project#2 - Hash Table 详解
Suggestions on one-stop development of testing life