参考了大牛的博客

http://blog.csdn.net/wangjian8006/article/details/7958838

题目大意:

给出n个点,在这些点中有些点是俱乐部点,并且有m个区域是由点围成的
输入第一行代表n个点
第二行代表m个区域
第3行代表俱乐部有L个
第四行有L个数,分别标记哪些个点事是俱乐部
接下来2*m行,代表m个区域,每个区域由两行表示,第一行为区域由T个点围成的,
第二行T个数代表是哪些点围成这个区域,这些点按逆时针围成这个区域,相邻两点代表一条边
最后一点和第一点也是一条边,这样就是一个闭合的区域

现在问,在图中找出一个区域,使得所有俱乐部点到这个区域所要穿过的边之和最少,
输出最少的边数之和

题目思路:

建图 假如两个区域有公共边 则 两个区域的距离是 1, 然后 Floyd 求出所有区域的距离。

剩下的暴力解解决就OK了

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
#define INF 0xfffffff
#define maxn 260 struct Area
{
int num;
int Point[maxn];
bool vis[maxn];
} P[maxn]; int G[maxn][maxn], Member[maxn];
int n, m, a;//n个点 m个区域 a个座城有俱乐部成员 void Floyd();
bool Adj(Area A, Area B);
int Slove();
int CountPoint(int k); int main()
{
cin >> m >> n >> a; for(int i=; i<a; i++)
cin >> Member[i]; for(int i=; i<m; i++)
{
cin >> P[i].num; for(int j=; j<P[i].num; j++)
{
cin >> P[i].Point[j];
P[i].vis[ P[i].Point[j] ] = true;
} P[i].Point[P[i].num] = P[i].Point[];
} for(int i=; i<m; i++)
{
for(int j=; j<i; j++)
{
G[i][j] = INF;
if( Adj(P[i], P[j]) )
G[i][j] = ; G[j][i] = G[i][j];
}
G[i][i] = ;
} Floyd(); int ans = Slove(); cout << ans << endl; return ;
}
void Floyd()
{
for(int k=; k<m; k++)
{
for(int i=; i<m; i++)
{
for(int j=; j<m; j++)
{
if(G[i][j] > G[i][k] + G[k][j] )
{
G[i][j] = G[i][k] + G[k][j];
}
}
}
}
} bool Adj(Area A, Area B)
{
for(int i=; i< A.num; i++)
{
for(int j=; j<B.num; j++)
{
if( (A.Point[i] == B.Point[j] && A.Point[i+] == B.Point[j+]) ||
(A.Point[i] == B.Point[j + ] && A.Point[i+] == B.Point[j]) )
return true;
}
}
return false;
} int Slove()
{
int index = , b[maxn];
for(int i=; i<m; i++)
{
b[i] = CountPoint(i);
} for(int i=; i<m; i++)
{
if(b[i] < b[index])
index = i;
}
return b[index];
} int CountPoint(int k)//计算所有点 到达这个区域k 需要穿越多少条边
{
int sum = ; for(int i=; i<a; i++)
{
int Min = INF;
for(int j=; j<m; j++)
{
if( P[j].vis[ Member[i] ] && Min > G[j][k] )
{
Min = G[j][k];
}
}
sum += Min;
}
return sum;
}

Walls POJ 1161的更多相关文章

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

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

  2. POJ 1161 Walls【floyd 以面为点建图】

    题目链接:http://poj.org/problem?id=1161 题目大意: 1.给出m个区域,n个俱乐部点.接下来是n个俱乐部点以及各个区域由什么点围成.求一个区域到各个俱乐部点的距离之和最小 ...

  3. poj 1161 Walls

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

  4. POJ 1161 Walls(Floyd , 建图)

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

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

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

  6. poj 1161 最短路构图

    题目链接:http://poj.org/problem?id=1161 #include <cstdio> #include <cmath> #include <algo ...

  7. Floyd 求最短路(poj 1161)

    Floyd-Warshall算法介绍: Floyd-Warshall算法的原理是动态规划. 设为从到的只以集合中的节点为中间节点的最短路径的长度. 若最短路径经过点k,则: 若最短路径不经过点k,则. ...

  8. 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...

  9. poj 1161 Floyd+枚举

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

随机推荐

  1. 使用jqMobi开发app基础:Badge的使用

    显示效果: 红色的部分就是Badge,能够用来显示数量或者是其它的信息. 使用事实上非常easy,  $.ui.updateBadge("#" + id, res.Msg, &qu ...

  2. [PWA] 1. Intro to Service worker

    Service worker stays between our browser and noetwork requests. It can help to fetch data from cache ...

  3. C#操作INI配置文件示例

    源文件地址:http://pan.baidu.com/share/link?shareid=2536126078&uk=1761850335创建如图所示的控件: 源代码: using Syst ...

  4. Drawable与Bitmap(转)

    Drawable                                                                                 以下这个是测试加载10 ...

  5. yii自动登陆的验证机制浅析

    一直在使用yii进行开发, 也知道如何去使用, 也仅仅是知道怎么去用罢了, 终归是没研究过源码, 心里发虚, 今天遇到一个问题, 关于自动登陆的问题. 要求就是, 修改登陆保存session天数为自定 ...

  6. Linq101-Set

    using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Set { / ...

  7. PHP 关于文件操作的简单介绍

    文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...

  8. IDisposable接口详解

    转载:http://www.cnblogs.com/davyli/archive/2010/09/13/1825042.html 正确实现 IDisposable .NET中用于释放对象资源的接口是I ...

  9. c#使用Microsoft Excel 12.0 object Libary导出的Excel文件office2003不能打开!!~~(分享)

    -----转载:http://hi.baidu.com/zhang_zhu_1/item/f3d47d1f86bf037a70d5e87e 使用C#导出数据到Excel文件时,Excel 2007组件 ...

  10. 利用Range改变光标位置

    先上代码,代码取自网上某插件中 function caret(begin, end) { if (this.length == 0) return; if (typeof begin == 'numb ...