POJ 1161 Walls【floyd 以面为点建图】
题目链接: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 以面为点建图】的更多相关文章
- POJ 1161 Walls ( Floyd && 建图 )
题意 : 在某国,城市之间建起了长城,每一条长城连接两座城市.每条长城互不相交.因此,从一个区域到另一个区域,需要经过一些城镇或者穿过一些长城.任意两个城市A和B之间最多只有一条长城,一端在A城市, ...
- POJ 1161 Walls(最短路+枚举)
POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...
- poj 1161 Walls
https://vjudge.net/problem/POJ-1161 题意:有m个区域,n个小镇,有c个人在这些小镇中,他们要去某一个区域中聚会,从一个区域到另一个区域需要穿墙,问这些人聚到一起最少 ...
- 网络流--最大流--POJ 2139(超级源汇+拆点建图+二分+Floyd)
Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...
- POJ 1161 Walls(Floyd , 建图)
题意: 给定n个城市, 然后城市之间会有长城相连, 长城之间会围成M个区域, 有L个vip(每个vip会处于一个城市里)要找一个区域聚会, 问一共最少跨越多少个长城. 分析: 其实这题难就难在建图, ...
- poj 2135 Farm Tour 最小费用最大流建图跑最短路
题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...
- 图论--网络流--最大流--POJ 3281 Dining (超级源汇+限流建图+拆点建图)
Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, an ...
- Walls POJ 1161
参考了大牛的博客 http://blog.csdn.net/wangjian8006/article/details/7958838 题目大意: 给出n个点,在这些点中有些点是俱乐部点,并且有m个区域 ...
- poj 1161 Floyd+枚举
题意是: 给出n个点,围成m个区域.从区域到另一个区域间需穿过至少一条边(若两区域相邻)——边连接着两点. 给出这么一幅图,并给出一些点,问从这些点到同一个区域的穿过边数最小值. 解题思路如下: 将区 ...
随机推荐
- VUE cli 4.x下配置多页面以及同时配置支持element-ui及mint-ui并且优化首页文件大小。
场景,公司的一个小型项目,需同时支持移动端和PC端.最开始考虑做两个独立的项目.但后来考虑到总共只有4个功能页面,布署起来相对麻烦.所以决定做在一个项目里. 1.升级vue-cli到4.x npm i ...
- csv和xlsx区别
CSV是文本文件,用记事本就能打开.XLS 是二进制的文件只有用 EXCEL 才能打开: CSV 文件格式只能保存活动工作表中的单元格所显示的文本和数值.数据列以逗号分隔,每一行数据都以回车符结束.如 ...
- 001_项目开源之_STM32激光雕刻机
我是标题:STM32激光雕刻机(开源免费) (一)首先感谢将离九歌 https://github.com/MaxwellXyao 提供的C8T6/GRBL的源码 (二)本设计开源(免费),请忽倒 ...
- git error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
原因:git 版本过低 解决方法:卸载旧版本,重装新版本
- 013_使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
for i in `cat user.txt`do useradd $i echo "123456" | passwd --stdin $idone
- luogu 4909 [Usaco2006 Mar]Ski Lift 缆车支柱 动态规划
可以出模拟赛T1? #include <bits/stdc++.h> #define N 5002 #define inf 1000000 #define setIO(s) freopen ...
- CF540D Bad Luck Island
嘟嘟嘟 看到数据范围很小,就可以暴力\(O(n ^ 3)\)dp啦. 我们令\(dp[i][j][k]\)表示这三种人分别剩\(i, j, k\)个的概率.然后枚举谁挂了就行. 这里的重点在于两个人相 ...
- SO2O連接報錯javax.net.ssl.SSLException: Received fatal alert: protocol_version)
原文:https://blog.csdn.net/gudejundd/article/details/89640741 1.什么是TLSSSL 是“Secure Sockets Layer”的缩写,中 ...
- Hadoop常用操作汇总
Hadoop Streaming示例程序(wordcount) run_hadoop_word_counter.sh $HADOOP_BIN streaming \ -input "${IN ...
- linux安装npm遇到权限问题 permission denied
--unsafe-per