人活着系列之芳姐和芳姐的猪(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 题目描写叙述 人活着假设是为了事业.从打工的到老板的,个个都在拼搏,奋斗了多年最终有了非凡成就.有了一 ...
随机推荐
- python爬虫---->github上python的项目
这里面通过爬虫github上的一些start比较高的python项目来学习一下BeautifulSoup和pymysql的使用.我一直以为山是水的故事,云是风的故事,你是我的故事,可是却不知道,我是不 ...
- C++ #include—尖括号和双引号的区别
如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include <文件名>,但有时候又会出现#include "文件名".你会 ...
- docker参数--restart=always的作用
创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动. 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker ...
- java中调用操作系统的命令
java.lang.Runtime类提供了exec() 方法来执行操作系统的命令. 使用静态的Runtime.getRuntime()方法可以获得当前的java应用程序对应的Runtime类的实例 R ...
- 【CF799E】Aquarium decoration 线段树
[CF799E]Aquarium decoration 题意:有n个物品,小A和小B各自喜欢其中的某些物品,一件物品可能既被小A喜欢又被小B喜欢,也可能既不被小A喜欢又不被小B喜欢.每个物品都有一个价 ...
- 【BZOJ4355】Play with sequence 线段树
[BZOJ4355]Play with sequence Description 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a ...
- 【POJ2409】Let it Bead Pólya定理
[POJ2409]Let it Bead 题意:用$m$种颜色去染$n$个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $n,m$很小就是了. 题解:在旋转$i ...
- mac常用工具
这里我整理一下,mac上经常要用的的工具(仅供参考): Homebrew HomeBrew是Mac下面的一个包管理器,方便我们安装一些Mac OS没有的UNIX工具.软件. iTerm2 iTerm2 ...
- webp图片优化
根据对目前国内浏览器占比与 WebP 的兼容性分析,大约有 50% 以上的国内用户可以直接体验到 WebP,如果你的网站以图片为主,或者你的产品基于 Chromium 内核,建议体验尝试.假如你打算在 ...
- Elasticsearch 与 Mongodb 数据同步问题
1.mongo-connector工具 首先安装python环境 wget http://www.python.org/ftp/python/3.0.1/Python-3.0.1.tgz tar -z ...