P2935 [USACO09JAN]最好的地方Best Spot

Floyd的水题(黄题)

海星。

这可能是我第一道发的Floyd的博客

inline void Floyd(){
for(register int k=;k<=n;k++)
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++) dis[i][j]=Min(dis[i][j],dis[i][k]+dis[k][j]);
}

这个是Floyd的算法

很简单就三行 仅此而已

但是 这个是一种方法

简单的说 Floyd是一种DP 求最短路(最长路)反正比spfa啥的好打

最关键就是时间复杂度比较高 高达N^3 所以没几道题用的到Floyd 反而多的是求正负环的spfa dijkstra

不说那么多了

见代码

#include <bits/stdc++.h>
#define Min(a,b) a<b?a:b
using namespace std;
typedef long long LL;
inline LL read () { LL res = ;int f () ;char ch = getchar ();
while (!isdigit(ch)) { if (ch == '-') f = - ;ch = getchar();}
while (isdigit(ch)) res = (res << ) + (res << ) + (ch ^ ) ,ch = getchar(); return res * f ;
}
LL n,m,p;
LL l[+];
LL dis[+][+];
const LL Inf=0x3f3f3f3fLL;
inline void Init(){
for(register int i=;i<=n;i++){
for(register int j=;j<=n;j++) dis[i][j]=Inf;
dis[i][i]=;
}
}
inline void Floyd(){
for(register int k=;k<=n;k++)
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++) dis[i][j]=Min(dis[i][j],dis[i][k]+dis[k][j]);
}
signed main () {
n=read(),p=read(),m=read();
Init();
for(register int i=;i<=p;i++) l[i]=read();
for(register int i=;i<=m;i++) {
LL u=read(),v=read();
dis[u][v]=dis[v][u]=read();
}
Floyd();
LL sum,ans,cnt=Inf;
for(register int i=;i<=n;i++){
sum=0LL;
for(register int j=;j<=p;j++) sum+=dis[i][l[j]];
if(sum<cnt) cnt=sum,ans=i;
}
cout << ans << endl ;
return ;
}

随机推荐

  1. Linux:iscsi存储服务器配置

    服务器添加4块硬盘 mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde 记下UUID值 mdadm -D /de ...

  2. 2.5.5 基本的 I/0 重定向

        标准输入/输出(standard I/O)可能是软件设计原则里最重要的概念了.这个概念就是:程序应该有数据的来源端.数据的目的端以及报告问题的地方,它们分别被称为标准输入(standard i ...

  3. js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() {  alert('water ...

  4. hrbust oj 1536 Leonardo's Notebook 置换群问题

    题目大意: 给出一个A~Z的置换G,问能否找到一个A~Z的置换G' 能够用来表示为 G = G'*G' 由定理: 任意一个长为 L 的置换的k次幂,都会把自己的每一个循环节分裂成gcd(L, K)份, ...

  5. HDU 1085 多重背包转化为0-1背包问题

    题目大意: 给定一堆1,2,5价值的硬币,给定三个数表示3种价值硬币的数量,任意取,找到一个最小的数无法取到 总价值为M = v[i]*w[i](0<=i<3) 那么在最坏情况下M个数都能 ...

  6. Sliding Window(滑动窗口)

    Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 58002   Accepted: 16616 Case Time Limi ...

  7. P2626 斐波那契数列(升级版) 洛谷(2626)

    https://www.luogu.org/problem/show?pid=2626 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f ...

  8. iOS消息推送原理和实现总结

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图:1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provi ...

  9. android (13) Fragment使用下

    一.Fragment使用: 要在你的activity中管理Fragment,须要使用FragmentManager,能够通过getFragmentManager(),这里注意要是在v4包要用getSu ...

  10. hdu 5950 Recursive sequence

    题意:告诉你数列的递推公式为f(n+1)=f(n)+2*f(n-1)+(n+1)^4 以及前两项a,b:问第n项为多少,结果对2147493647取模. 题解:有递推公式,马上应该就能想到矩阵快速幂: ...