当前位置:网站首页>[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);
}
}边栏推荐
- Le Cluster kubernets en cours d'exécution veut ajuster l'adresse du segment réseau du pod
- Flet教程之 14 ListTile 基础入门(教程含源码)
- La voie du succès de la R & D des entreprises Internet à l’échelle des milliers de personnes
- . Net Maui performance improvement
- 相机标定(1): 单目相机标定及张正友标定基本原理
- 【滤波跟踪】基于matlab捷联惯导仿真【含Matlab源码 1935期】
- LeetCode - 面试题17.24 最大子矩阵
- 禁锢自己的因素,原来有这么多
- STM32 entry development write DS18B20 temperature sensor driver (read ambient temperature, support cascade)
- Poor math students who once dropped out of school won the fields award this year
猜你喜欢

Swiftui swift internal skill how to perform automatic trigonometric function calculation in swift

聊聊SOC启动(十) 内核启动先导知识

Design intelligent weighing system based on Huawei cloud IOT (STM32)

核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?

Suggestions on one-stop development of testing life

The database synchronization tool dbsync adds support for mongodb and es

【滤波跟踪】基于matlab捷联惯导仿真【含Matlab源码 1935期】

What is cloud computing?

Onedns helps college industry network security

科普达人丨一文弄懂什么是云计算?
随机推荐
STM32 entry development NEC infrared protocol decoding (ultra low cost wireless transmission scheme)
What is high cohesion and low coupling?
Flet教程之 17 Card卡片组件 基础入门(教程含源码)
Blog moved to Zhihu
一度辍学的数学差生,获得今年菲尔兹奖
【问道】编译原理
STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
Solve the problem that vscode can only open two tabs
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
Neural approvals to conversational AI (1)
Creative information was surveyed by 2 institutions: greatdb database has been deployed in 9 places
Use metersphere to keep your testing work efficient
The road to success in R & D efficiency of 1000 person Internet companies
In SQL, I want to set foreign keys. Why is this problem
Talk about SOC startup (IX) adding a new board to uboot
The Oracle message permission under the local Navicat connection liunx is insufficient
博客搬家到知乎
Talk about SOC startup (11) kernel initialization
使用MeterSphere让你的测试工作持续高效
Verilog design responder [with source code]