题目链接: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. mysql自增id的下一个值

    SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name='nst_t_department' AND table_s ...

  2. MySQL5.7 (审计)安装audit审计插件

    转载自:https://blog.51cto.com/13941177/2173086 注意: 安装插件的方式优缺点: 缺点:日志信息比较大,对性能影响大. 优点:对每一时刻每一用户的操作都有记录. ...

  3. learning express step(五)

    learning  express  middleware var express = require('express'); var app = express(); var myLogger = ...

  4. tree/pstree

    tree yum install tree 不指定路径的话直接显示当前目录的结构 加上-L 表示只显示到指定的目录层级 tree -L 2 ./

  5. 利用chrome devtool 观察页面占用内存

    推荐阅读:解决内存问题 1. 任务管理器 我们看看下面这幅图: 内存占用空间:原生内存,Dom节点就是存在原生内存里面的. Javascript使用的内存:代表JS堆内存,我们只需要关心括号里面的值( ...

  6. html预加载之link标签

    我们之前提及过link rel 里面有preload和prefetch.modulepreload,都是用于预加载资源 <link rel="preload" href=&q ...

  7. Python互联网金融之用户增长的数据逻辑

    怎样看待和应用我们互联网金融中的数据? 怎样进行数据分析? 互联网金融数据分析的三个层面: (1)指标层面 建立指标体系,观察指标涨跌的情况 (2)行业框架 不同的行业对于各个指标的权重不同 复投率 ...

  8. ROS机器人开发实践学习笔记1

    刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young to si ...

  9. javascript中稀疏数组和密集数组

    密集数组 数组是一片连续的存储空间,有着固定的长度.加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......add ...

  10. MySql的Linux版安装

    1,官网下载MySql的Linux版: 下载地址:http://dev.mysql.com//downloads/mysql/ 2.上传到Linux服务器,建议放在/opt/目录下 3.检查当前系统是 ...