题目链接:http://poj.org/problem?id=1161

题目大意:

1.给出m个区域,n个俱乐部点。接下来是n个俱乐部点以及各个区域由什么点围成。求一个区域到各个俱乐部点的距离之和最小。

解题思路:

1.这题建图比较麻烦,以区域为点建图,区域之间若有边,则两区域的距离为1,建完图后跑一遍floyd就可以求出两两区域的最小距离。

2.对于答案,枚举每一个区域到各个俱乐部点的相邻区域的距离之和,取最小值。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int inf = 0x3f3f3f3f; int m, n, l;
int club[], vis[][];//标记i点是否与j区域相邻
int edge[][]; //更新i到j边的相邻区域是哪个
int map[][]; //建图 void floyd()
{
for(int i = ; i <= m; i ++)
map[i][i] = ;
for(int k = ; k <= m; k ++)
for(int i = ; i <= m; i ++)
for(int j = ; j <= m; j ++)
map[i][j] = map[j][i] = min(map[i][j], map[i][k] + map[k][j]);
} int main()
{
while(scanf("%d", &m) != EOF) //m个区域
{
mem(edge, -); //表示没有相邻区域
mem(map, inf), mem(vis, -);
scanf("%d%d", &n, &l);//n个点,其中l个点是俱乐部所在的点
for(int i = ; i <= l; i ++)
scanf("%d", &club[i]);
for(int i = ; i <= m; i ++)
{
int k, temp;
scanf("%d", &k); //每个区域由k个点逆时针围成 注意最后一个点与第一个点也有边
scanf("%d", &temp);
vis[temp][i] = ;
int first = temp;
for(int j = ; j < k; j ++)
{
int x;
scanf("%d", &x);
vis[x][i] = ;
if(edge[temp][x] == - || edge[x][temp] == -)
edge[temp][x] = edge[x][temp] = i;
else
{
map[edge[temp][x]][i] = map[i][edge[temp][x]] = ;
edge[temp][x] = edge[x][temp] = i;
}
temp = x;
}
if(edge[first][temp] == - || edge[temp][first] == -)
edge[first][temp] = edge[temp][first] = i;
else
{
map[edge[first][temp]][i] = map[i][edge[first][temp]] = ;
edge[first][temp] = edge[temp][first] = i;
}
}
floyd();
int ans = inf;
for(int i = ; i <= m; i ++) //枚举答案 枚举每一个区域
{
int temp = ;
for(int j = ; j <= l; j ++)
{
int temp1 = inf;
for(int k = ; k <= m; k ++)
{
if(vis[club[j]][k] == -)
continue;
temp1 = min(temp1, map[i][k]);
}
temp += temp1;
}
ans = min(ans, temp);
}
printf("%d\n", ans);
}
return ;
}

POJ 1161 Walls【floyd 以面为点建图】的更多相关文章

  1. POJ 1161 Walls ( Floyd && 建图 )

    题意 :  在某国,城市之间建起了长城,每一条长城连接两座城市.每条长城互不相交.因此,从一个区域到另一个区域,需要经过一些城镇或者穿过一些长城.任意两个城市A和B之间最多只有一条长城,一端在A城市, ...

  2. POJ 1161 Walls(最短路+枚举)

    POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...

  3. poj 1161 Walls

    https://vjudge.net/problem/POJ-1161 题意:有m个区域,n个小镇,有c个人在这些小镇中,他们要去某一个区域中聚会,从一个区域到另一个区域需要穿墙,问这些人聚到一起最少 ...

  4. 网络流--最大流--POJ 2139(超级源汇+拆点建图+二分+Floyd)

    Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...

  5. POJ 1161 Walls(Floyd , 建图)

    题意: 给定n个城市, 然后城市之间会有长城相连, 长城之间会围成M个区域, 有L个vip(每个vip会处于一个城市里)要找一个区域聚会, 问一共最少跨越多少个长城. 分析: 其实这题难就难在建图, ...

  6. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  7. 图论--网络流--最大流--POJ 3281 Dining (超级源汇+限流建图+拆点建图)

    Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, an ...

  8. Walls POJ 1161

    参考了大牛的博客 http://blog.csdn.net/wangjian8006/article/details/7958838 题目大意: 给出n个点,在这些点中有些点是俱乐部点,并且有m个区域 ...

  9. poj 1161 Floyd+枚举

    题意是: 给出n个点,围成m个区域.从区域到另一个区域间需穿过至少一条边(若两区域相邻)——边连接着两点. 给出这么一幅图,并给出一些点,问从这些点到同一个区域的穿过边数最小值. 解题思路如下: 将区 ...

随机推荐

  1. Java进阶知识24 Spring的事务管理(事务回滚)

    1.事务控制概述   1.1.编程式事务控制         自己手动控制事务,就叫做编程式事务控制.         Jdbc代码: connection.setAutoCommit(false); ...

  2. [Qt Quick] qmlscene 工具的使用

    qmlscene是Qt 5提供的一个查看qml文件效果的工具.特点是不需要编译应用程序. qmlscene = qml + scene (场景) qmlscene.exe位于Qt的安装目录下 (类似/ ...

  3. while 循环 continue break 用法例子

    py2 temp = "理解" # utf- 8 #解码, 需要指定原来的是什么编码 temp_unicode = temp.decode("utf-8") # ...

  4. 【原创】FltGetFileNameInformation蓝屏分析

    FAULTING_IP: nt!SeCreateAccessStateEx+5b80564184 848788000000 test byte ptr [edi+88h],al TRAP_FRAME: ...

  5. mongoose 安装及配置

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方>案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据 ...

  6. Python3 编程之字符串处理

    Python3 编程之字符串处理 在编程中最常见的任务就是字符串的处理,So,学好字符串的使用非常重要 一.变量的定义规范 Python中声明变量时,要符合以下规则为准: 只能使用数字.字母.下划线组 ...

  7. git 优雅的撤销中间某次提交

    环境git : 2+ 前言最近两天,公司的git合并代码时,出现了严重的问题,浪费很多时间: 现在记录下: 情况是这样的,一个同事自己的本地分支(远程没有),不知怎么的,有了别人开发分支的代码,而他自 ...

  8. python3 django项目从项目中导出依赖包

    1. 在项目的根目录中使用mac终端执行命令, pip3 freeze > requirements.txt #requirements.txt只是个名字可以随便起,一般默认为requireme ...

  9. kotlin标准委托之阻止属性的赋值操作

    import kotlin.properties.Delegates fun main(arg: Array<String>) { val user = user() user.name= ...

  10. smarty建的mvc环境

    ================================搭建MVC结构================================基于MVC,解耦合 (高内聚,低耦合),优点:易维护.易扩 ...