当前位置:网站首页>[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);
}
}
边栏推荐
- 博客搬家到知乎
- Talk about SOC startup (x) kernel startup pilot knowledge
- 通过环境变量将 Pod 信息呈现给容器
- Software design - "high cohesion and low coupling"
- 千人規模互聯網公司研發效能成功之路
- STM32 entry development write DS18B20 temperature sensor driver (read ambient temperature, support cascade)
- QT implements the delete method of the container
- Talk about SOC startup (VI) uboot startup process II
- Case study of Jinshan API translation function based on retrofit framework
- 简单介绍一下闭包及它的一些应用场景
猜你喜欢
Activity lifecycle
The post-90s resigned and started a business, saying they would kill cloud database
Fleet tutorial 19 introduction to verticaldivider separator component Foundation (tutorial includes source code)
本地navicat连接liunx下的oracle报权限不足
Drive HC based on de2115 development board_ SR04 ultrasonic ranging module [source code attached]
Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
About the application of writing shell script JSON in JMeter
超标量处理器设计 姚永斌 第9章 指令执行 摘录
STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
How to write test cases for test coupons?
随机推荐
正在运行的Kubernetes集群想要调整Pod的网段地址
How to write test cases for test coupons?
What development models did you know during the interview? Just read this one
[system design] index monitoring and alarm system
相机标定(2): 单目相机标定总结
【滤波跟踪】基于matlab扩展卡尔曼滤波EKF和无迹卡尔曼滤波UKF比较【含Matlab源码 1933期】
Flet教程之 15 GridView 基础入门(教程含源码)
千人规模互联网公司研发效能成功之路
QT implements the delete method of the container
Some opinions and code implementation of Siou loss: more powerful learning for bounding box regression zhora gevorgyan
Talk about SOC startup (VI) uboot startup process II
Common SQL statement collation: MySQL
科普达人丨一文弄懂什么是云计算?
如何在博客中添加Aplayer音乐播放器
聊聊SOC启动(十一) 内核初始化
QT | multiple windows share a prompt box class
SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
超标量处理器设计 姚永斌 第9章 指令执行 摘录
大佬们有没有人遇到过 flink oracle cdc,读取一个没有更新操作的表,隔十几秒就重复读取
TDengine 社区问题双周精选 | 第二期