Sweet Butter 香甜的黄油

    题目大意:m个点,n头奶牛,p条边,每一头奶牛在一个点上,一个点可以有多只奶牛,求这样一个点,使得所有奶牛到这个点的距离之和最小。

    注释:n<=500 , m<=800 , p<=1450 , 连边的牧场之间的距离d<=255

      想法:显然,这是一个最短路问题,有两种途径:1. 跑多源最短路。2. 跑m遍单源最短路。

        第1种想法想到floyd , 时间复杂度O(m^3)=O(5.12*10^8),过不去,用第二种想法吧。

        由于floyd都T了,n遍Dijkstra的时间复杂度也是O(m^3),而另一种单源最短路是spfa,时间复杂度O(m*p+m*n)。所以,spfa才是我们想要的算法。

        首先,对于每一个节点跑一遍spfa,注意清数组。存边用邻接矩阵或链式前向星均可,博主在此采用链式前向星。

    最后,附上丑陋的代码...

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
queue<int>q;
int f[],a[];
bool v[];
int to[],val[],next[],head[],tot;
void add(int x,int y,int z)//存边
{
to[++tot]=y;
val[tot]=z;
next[tot]=head[x];
head[x]=tot;
}
void spfa(int xp)//spfa,xp表示当前枚举的源点
{
memset(f,0x3f,sizeof(f));
memset(v,,sizeof(v));
q.push(xp),f[xp]=,v[xp]=;
while(q.size())
{
int x,y;
x=q.front(),q.pop(),v[x]=;
for(int i=head[x];i;i=next[i])
{
if(f[y=to[i]]>f[x]+val[i])
{
f[y]=f[x]+val[i];
if(v[y]==) q.push(y),v[y]=;
}
}
}
}
int main()
{
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
int fr,t,va;
for(int i=;i<=p;i++)
{
scanf("%d%d%d",&fr,&t,&va);
add(fr,t,va);//存双向边
add(t,fr,va);//存双向边
}
long long minn=9220000000000000ll;
for(int i=;i<=m;i++)
{
spfa(i);
long long ans=;
for(int j=;j<=n;j++)
{
ans+=f[a[j]];
}
minn=min(ans,minn);
}
printf("%lld",minn);
return ;
}

      小结,错误

            1.双向边,双向边,双向边

            2.line 60:写成了 ans=min ( minn , ans ) 全盘爆蛋

            3.因为本题不一定连通,所以在一定程度上我们需要考虑不连通的情况,所以ans和minn开long long 来解决。

  转载请注明:http://www.cnblogs.com/ShuraK/p/7852461.html

最新文章

  1. [转载]强制不使用“兼容性视图”的HTML代码
  2. blog (后续更新)
  3. SQL Server中的高可用性(3)----复制
  4. 【转】eclipse 创建struts2
  5. CVE-2015-1328 Ubuntu 12.04, 14.04, 14.10, 15.04 overlayfs Local Root
  6. 安卓 io流 写入文件,再读取的基本使用
  7. 纯后台生成highcharts图片有哪些方法?
  8. js修改input的type属性问题
  9. 简单数据库开发之dao层开发
  10. Mittag-Leffer函数, Matlab内部函数
  11. mysql 存储过程的实现原理
  12. 在Eclipse中创建maven项目出现的环境警告 j2se-1.5
  13. linux 文件打包压缩成.tar.gz
  14. FtpCopy数据定时自动备份软件(FTP定时备份)
  15. nginx介绍(五) - 高可用
  16. equals和==的区别小结
  17. Android多线程下载
  18. BZOJ2460:[BJWC2011]元素(贪心,线性基)
  19. sublime sftp注册码
  20. 使用System.Net.Mail发送邮件

热门文章

  1. org.hibernate.MappingException:Unknown entity:java.util.ArrayList
  2. OpenStack_I版 7.Cinder部署
  3. MvcHtmlString解决MVC中从后台返回HTML代码被编码问题
  4. 动态链接库(DLL)
  5. [Lugu3380]【模板】二逼平衡树(树套树)
  6. Cglib及其基本使用
  7. php数组基础知识
  8. 移动端造json假数据时的坑(转义符问题)
  9. css学习の第三弹—盒模型的创建和使用
  10. n皇后问题与2n皇后问题