http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2929

这个题一方面数据水,另一方面就是思维水,一拿到题就以为考最小生成树。

因为这个题需要求各点间的距离,又因为猪圈的数目最大为600,所以根本就没寻思考Floyd,一方面思维,另一方面是水的后台,因为猪每天去固定的猪圈吃饭,所以求出每个猪到每个猪圈固定的距离便可。

WA(以为已经求出各点间的最短距离,只要猪圈没猪便不会去)

反例

3 4 3

2

3

4

1 2 1

1 3 1

1 4 1

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define N 1000001
using namespace std;
int map[][],dis[],v[];
int n,m,k,a[],V;
void Floy()
{
for(int k=; k<=m; k++)
{
for(int j=; j<=m; j++)
{
for(int i=; i<=m; i++)
{
if(map[j][i]>map[j][k]+map[k][i])
{
map[j][i]=map[j][k]+map[k][i];
}
}
}
}
}
void prim()
{
memset(v,,sizeof(v));
for(int i=; i<=m; i++)
dis[i]=map[a[]][i];
v[a[]]=;
int min,k;
int sum=;
for(int i=; i<V; i++)
{
min=N;
for(int j=; j<=m; j++)
{
if(v[j]==&&dis[j]<min)
{
min=dis[j];
k=j;
}
}
v[k]=;
//printf("min==%d\n",min);
sum=sum+min;
for(int j=; j<=m; j++)
{
if(v[j]==&&dis[j]>map[k][j])
{
dis[j]=map[k][j];
}
}
}
printf("%d\n",sum);
}
int main()
{
int xx[],yy[],zz[];
int sum,sum1;
scanf("%d%d%d",&n,&m,&k);
for(int i=; i<=m; i++)
{
for(int j=; j<=m; j++)
{
map[i][j]=N;
map[j][i]=N;
}
map[i][i]=;
}
int b[];
V=;
memset(b,,sizeof(b));
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
}
for(int i=; i<=m; i++)
{
if(b[a[i]])
V++;
}
for(int i=; i<=k; i++)
{
scanf("%d%d%d",&xx[i],&yy[i],&zz[i]);
if(zz[i]<map[xx[i]][yy[i]])
{
map[xx[i]][yy[i]]=zz[i];
map[yy[i]][xx[i]]=zz[i];
}
}
Floy();
/*for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
printf("%d ",map[i][j]);
}
printf("\n");
}*/
for(int i=; i<=k; i++)
{
sum=;
sum1=;
for(int j=; j<=n; j++)
{
if(xx[i]==a[j]) sum++;
if(yy[i]==a[j]) sum1++;
}
if(sum==)
{
for(int k=; k<=m; k++)
{
map[xx[i]][k]=N;
map[k][xx[i]]=N;
}
map[xx[i]][xx[i]]=;
}
if(sum1==)
{
for(int k=; k<=m; k++)
{
map[yy[i]][k]=N;
map[k][yy[i]]=N;
}
map[yy[i]][yy[i]]=;
}
if(sum&&sum1)
{
map[xx[i]][yy[i]]=sum*map[xx[i]][yy[i]];
map[yy[i]][xx[i]]=sum1*map[yy[i]][xx[i]];
}
}
prim();
}
return ;
}

AC的

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define N 1000001
using namespace std;
int n,m,k;
int a[],map[][];
void Floy()
{
for(int k=; k<=m; k++)
{
for(int i=; i<=m; i++)
{
for(int j=; j<=m; j++)
{
if(map[i][j]>map[i][k]+map[k][j])
{
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
}
int main()
{
int xx,yy,zz;
scanf("%d%d%d",&n,&m,&k);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
for(int i=; i<=m; i++)
{
for(int j=; j<=m; j++)
{
map[i][j]=N;
map[j][i]=N;
}
map[i][i]=;
}
while(k--)
{
scanf("%d%d%d",&xx,&yy,&zz);
if(map[xx][yy]>zz)
{
map[xx][yy]=zz;
map[yy][xx]=zz;
}
}
Floy();
int min=N;
int sum;
for(int i=; i<=m; i++)
{
sum=;
for(int j=; j<=n; j++)
{
sum=sum+map[a[j]][i];
}
if(min>sum)
min=sum;
}
printf("%d\n",min);
return ;
}

人活着系列之芳姐和芳姐的猪(Floyd)的更多相关文章

  1. 人活着系列Tanya和蔡健雅猪 (floyd)

    人活着系列之芳姐和芳姐的猪 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 芳姐特别喜欢猪,所以,她特意养了m个猪圈,顺便在k条无向边,每条边有都有起点v ...

  2. 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏

    人活着系列之平方数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 偶然和必然?命运与意志?生与死?理性与情感?价值与非价值?在&quo ...

  3. SDUT OJ 之 人活着系列之寻找最完美的人生

    人活着系列之寻找最完美的人生 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 也许,人活着就是要尝试人世间的酸甜苦辣,喜怒哀乐,经 ...

  4. sdut 2934 人活着系列之平方数 (完全背包变形)

    题目链接 分析:完全背包的变形,每一层的d[]数组代表这一层的这个数新加入以后所构成的val的种类. #include <iostream> #include <cstdio> ...

  5. 小P的故事——神奇的换零钱&&人活着系列之平方数

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2777&cid=1219 这题不会,看了别人的代码 #include <iostre ...

  6. 人活着系列之开会(Floy)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2930 题意:所有点到Z点的最短距离.因为岛名由 ...

  7. 人活系列Streetlights (秩)

    人活着系列之Streetlights Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 人活着假设是为了家庭,亲情----能够说是在这个世界上最温暖人心的, ...

  8. SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)

    人活着系列之Streetlights Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 人活着假设是为了家庭,亲情----能够说 ...

  9. 人们的Live Meeting系列 (floyd)

    人活着系列之开会 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 人活着假设是为了事业.从打工的到老板的,个个都在拼搏,奋斗了多年最终有了非凡成就.有了一 ...

随机推荐

  1. Linux IPC BSD Pipe

    mkfifo() //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno.VS$man 3 mkfifo #incl ...

  2. Apache服务器SSL双向认证配置

    以Win32版Apache与OpenSSL为例,介绍从创建数字证书到Apache配置的整个过程,希望对读者有所帮助. Apache是目前最流行的WEB服务器之一,借助OpenSSL库,我们可以在Apa ...

  3. Volley overview

    https://developer.android.com/training/volley/   需FQ https://developer.android.google.cn/training/vo ...

  4. 网狐荣耀平台找不到存储过程 'GSP_GS_LoadGameMatchItem'错误解决

    把RYGameMatchDB的存储过程复制到RYGameScoreDB即可,GSP_GS_InsertGameMatchItem和GSP_GS_DeleteGameMatchItem也一样 由于存储过 ...

  5. sencha touch Ext.app.Application

    Ext.app.Application一般用于app.js中 用来初始化整个应用 可以预先加载controllers(控制器),models(模型),stores(数据源),views(视图) 例如: ...

  6. Amazon ec2 改成密码登录方式

    sudo passwd rootsu rootvi /etc/ssh/sshd_config"# PasswordAuthentication yes" uncommentsbin ...

  7. IIS7配置伪静态把后缀名映射为html方案

    1.在IIS新建站点.[创建的时候不用去选择版本和模式,默认即可] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1)右边" ...

  8. layer.load()加载层如何加入文字描述

    https://fly.layui.com/jie/3586/ https://www.layui.com/doc/modules/layer.html#layer.load //loading层va ...

  9. vue--引入富文本编辑器

    https://blog.csdn.net/div_ma/article/details/79536634 // 使用 https://blog.csdn.net/div_ma/article/det ...

  10. 你不可缺少的技能——Markdown编辑

    Markdown简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式.请不要被「标记」.「语言」所迷惑,Markdown 的语法十分 ...