人活着系列之芳姐和芳姐的猪(Floyd)
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)的更多相关文章
- 人活着系列Tanya和蔡健雅猪 (floyd)
人活着系列之芳姐和芳姐的猪 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 芳姐特别喜欢猪,所以,她特意养了m个猪圈,顺便在k条无向边,每条边有都有起点v ...
- 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏
人活着系列之平方数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 偶然和必然?命运与意志?生与死?理性与情感?价值与非价值?在&quo ...
- SDUT OJ 之 人活着系列之寻找最完美的人生
人活着系列之寻找最完美的人生 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 也许,人活着就是要尝试人世间的酸甜苦辣,喜怒哀乐,经 ...
- sdut 2934 人活着系列之平方数 (完全背包变形)
题目链接 分析:完全背包的变形,每一层的d[]数组代表这一层的这个数新加入以后所构成的val的种类. #include <iostream> #include <cstdio> ...
- 小P的故事——神奇的换零钱&&人活着系列之平方数
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2777&cid=1219 这题不会,看了别人的代码 #include <iostre ...
- 人活着系列之开会(Floy)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2930 题意:所有点到Z点的最短距离.因为岛名由 ...
- 人活系列Streetlights (秩)
人活着系列之Streetlights Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 人活着假设是为了家庭,亲情----能够说是在这个世界上最温暖人心的, ...
- SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)
人活着系列之Streetlights Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 人活着假设是为了家庭,亲情----能够说 ...
- 人们的Live Meeting系列 (floyd)
人活着系列之开会 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 人活着假设是为了事业.从打工的到老板的,个个都在拼搏,奋斗了多年最终有了非凡成就.有了一 ...
随机推荐
- Qt编写activex控件在网页中运行
qt能够实现的东西非常多,还可以写activex控件直接在网页中运行.参照qtdemo下的例子即可. 方案一:可执行文件下载:https://pan.baidu.com/s/14ge9ix2Ny0x7 ...
- 【大数据系列】hive安装及启动
一.安装好jdk和hadoop 二.下载apache-hive https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.0/ 三.解压到安装 ...
- 原生js--insertAdjacentHTML
insertAdjacentHTML是IE浏览器提供向DOM中插入html字符串的方法,字符串会自动生成在DOM树中. 其调用方式为elem.insertAdjacentHTML( position, ...
- MySQL DROP 大表时的注意事项
对于表的删除,因为InnoDB引擎会在table cache层面维护一个全局独占锁一直到DROP TABLE完成为止,这样,对于表的其他操作会被HANG住.对于较大的表来说,DROP TABLE操作可 ...
- 攻防对抗中常用的windows命令(渗透测试和应急响应)
一.渗透测试 1.信息收集类 #查看系统信息 >systeminfo #查看用户信息 >net user >net user xxx #查看网络信息 >ipconfig /al ...
- Linux性能监控命令——sar
介绍 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的 ...
- nginx虚拟目录配置
参考文章:https://blog.csdn.net/whatday/article/details/50649461 1. location ~ ^/awstats/ { root /home/aw ...
- Razon模板
转:http://www.cnblogs.com/huangxincheng/p/3644313.html 随笔- 119 文章- 0 评论- 2039 抛弃NVelocity,来玩玩Razor ...
- vmware下Ubuntu屏幕分辨率设置
1.查看现有设备 xrandr -q 输出如下: Screen 0: minimum 1 x 1, current 800 x 600, maximum 8192 x 8192 Virtual1 co ...
- 51nod1432 独木舟
1432 独木舟 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者 ...