当前位置:网站首页>[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);
}
}边栏推荐
- 對比學習之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
- 科普达人丨一文弄懂什么是云计算?
- . Net Maui performance improvement
- 请查收.NET MAUI 的最新学习资源
- 使用MeterSphere让你的测试工作持续高效
- Poor math students who once dropped out of school won the fields award this year
- [system design] index monitoring and alarm system
- Talk about SOC startup (x) kernel startup pilot knowledge
- What is high cohesion and low coupling?
- What is cloud computing?
猜你喜欢

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

How much do you know about excel formula?

. Net Maui performance improvement

分布式数据库主从配置(MySQL)

Nuclear boat (I): when "male mothers" come into reality, can the biotechnology revolution liberate women?

超标量处理器设计 姚永斌 第10章 指令提交 摘录

18 basic introduction to divider separator component of fleet tutorial (tutorial includes source code)

Excel公式知多少?

STM32F1与STM32CubeIDE编程实例-315M超再生无线遥控模块驱动

【神经网络】卷积神经网络CNN【含Matlab源码 1932期】
随机推荐
MIF file format record
【系统设计】指标监控和告警系统
Flet教程之 19 VerticalDivider 分隔符组件 基础入门(教程含源码)
R语言使用magick包的image_mosaic函数和image_flatten函数把多张图片堆叠在一起形成堆叠组合图像(Stack layers on top of each other)
Verilog design responder [with source code]
本地navicat连接liunx下的oracle报权限不足
Some opinions and code implementation of Siou loss: more powerful learning for bounding box regression zhora gevorgyan
SwiftUI 4 新功能之掌握 WeatherKit 和 Swift Charts
Learning notes | data Xiaobai uses dataease to make a large data screen
R语言使用quantile函数计算评分值的分位数(20%、40%、60%、80%)、使用逻辑操作符将对应的分位区间(quantile)编码为分类值生成新的字段、strsplit函数将学生的名和姓拆分
Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
Neural approvals to conversational AI (1)
Technology sharing | packet capturing analysis TCP protocol
Reasons for the failure of web side automation test
How to add aplayer music player in blog
Drive HC based on de2115 development board_ SR04 ultrasonic ranging module [source code attached]
Apprentissage comparatif non supervisé des caractéristiques visuelles par les assignations de groupes de contrôle
Briefly introduce closures and some application scenarios
What is cloud computing?
清华姚班程序员,网上征婚被骂?