参考了大牛的博客

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. ListView嵌套ListView优化

    在做业务时候,一个ListView显示多种数据类型,我们想到的方法是ListView在嵌套一个ListView,对于子ListView 占父ListView的一行,就攻克了问题,可是这种逻辑是不是有点 ...

  2. 数据存储简单了解(NSUserDefaults)

    数据存储-使用NSUserDefaults 两个类介绍: NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefault ...

  3. 安全框架Shiro和Spring Security比较

    Shiro 首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势. Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证. ...

  4. [转] TCP数据包重组实现分析

    PS: 这个实现对于某些特定情况未必是最佳实现,可以用数组来代替队列来实现 参照TCP/IP详解第二卷24~29章,详细论述了TCP协议的实现,大概总结一下TCP如何向应用层保证数据包的正确性.可靠性 ...

  5. Java基础知识强化之IO流笔记19:FileOutputStream的三个write方法

    1. FileOutputStream的三个write方法:  void write(byte[] buffer)           Writes the entire contents of th ...

  6. python简单小爬虫爬取易车网图片

    上代码: import requests,urllib.request from bs4 import BeautifulSoup url = 'http://photo.bitauto.com/' ...

  7. Alibaba FastJson

    import com.alibaba.fastjson.JSON import com.alibaba.fastjson.JSONObject class Test { static main(arg ...

  8. spring-data-mongodb查询结果返回指定字段

        方法1 DBObject dbObject = new BasicDBObject(); dbObject.put("status", 1); DBObject field ...

  9. Wpf TextChanged事件导致死循环,事件触发循环问题

    1.实例: 说明:当TextBox控件的Text内容发生变化时,TextChanged事件触发,并且会立即同步执行. 基于这个特点,设置一个全局变量标识,ChangeTxtB,如果是正在修改txtB的 ...

  10. Android打开系统的Document文档图片选择

    打开Document UI 过滤图片 private void startAcitivty() { Intent intent = new Intent(); intent.setAction(&qu ...