Picnic Planning

20181013
生成树 状压 K限制生成树

题意

矮人虽小却喜欢乘坐巨大的轿车,车大到能够装下不管多少矮人。某天,N(N≤20)个矮人打算到野外聚餐。为了集中到聚餐地点,矮人A 要么开车到矮人B 家中,留下自己的轿车在矮人B 家,然后乘坐B 的轿车同行;要么直接开车到聚餐地点,并将车停放在聚餐地。尽管矮人的家非常大,能够停放无数量轿车,可是聚餐地点却最多仅仅能停放K 辆轿车。给你一张加权无向图,描写叙述了N 个矮人的家和聚餐地点,求出全部矮人开车最短总路程

题解

题本身是一道\(k\)限制生成树裸题,但那东西太迷幻,不会.因为数据规模比较小,暴力能过,所以也没学.这里用的是状压\(+Prim\).
因为根节点只能连不大于\(k\)条边,所以我们暴力枚举根节点能连的边的状态,再将剩下的点跑最小生成树,更新最小代价.

  • 用\(map\)映射每个人的名字
  • 可能有重边,需要更新两点之间的最短距离
  • 这里我们用邻接矩阵存边,用\(Prim\)跑最小生成树,不然时间复杂度过不去
  • 每次生成树必须加够\(N-1\)条边后才能更新\(ans\)
  • 输出应遵循题目规则
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=430;
int n,k,num,cnt;
int fa[22],ans,bns;
map< string , int >mm;
int ss[22][22];
struct fy
{int from,to,d;bool operator<(const fy&a)const{return d<a.d;};
}q[maxn];
char str[30],str1[30];
void add(int a,int b,int c){q[++num]=(fy){a,b,c};}
int can(int a)
{bns=0;int he=0,w=1;while(a){++w;if(a&1){he++;fa[w]=1;if(ss[1][w]==ss[0][0])return 0;bns+=ss[1][w];}a>>=1;}if(he<=k)return he;return 0;
}
int find(int a)
{while(a!=fa[a])a=fa[a]=fa[fa[a]];return a;
}
void ku(int x)//披着羊皮的狼(滑稽)
{if(!x)return;for(int i=1;i<=num;i++){if(q[i].from==1||q[i].to==1)continue;int a=find(q[i].from);int b=find(q[i].to);if(a!=b){if(x==(cnt-1))break;fa[a]=b;x++;bns+=q[i].d;if(bns>ans)return;}}if(x==(cnt-1))ans=min(ans,bns);
}
int main()
{int t;scanf("%d",&t);while(t--){mm.clear();cnt=0;num=0;scanf("%d",&n);memset(ss,0x3f,sizeof ss);mm["Park"]=++cnt;ans=ss[0][0];for(int i=1;i<=n;i++){int a,b,c;scanf("%s%s%d",str,str1,&c);if(!mm[str])mm[str]=++cnt;if(!mm[str1])mm[str1]=++cnt;a=mm[str];b=mm[str1];ss[a][b]=min(ss[a][b],c);ss[b][a]=ss[a][b];}scanf("%d",&k);for(int i=1;i<=cnt;i++)for(int j=i+1;j<=cnt;j++)if(ss[i][j]&&(ss[i][j]!=ss[0][0]))add(i,j,ss[i][j]);sort(q+1,q+1+num);for(int s=0;s<(1<<(cnt-1));s++)//枚举根节点的状态{for(int i=1;i<=cnt;i++)fa[i]=i;ku(can(s));}printf("Total miles driven: %d\n",ans);//输出}return 0;
}

转载于:https://www.cnblogs.com/ffdy/p/9798597.html

Picnic Planning相关推荐

  1. Poj·Picnic Planning

    初见安~这里是传送门:Poj P1639 Description The Contortion Brothers are a famous set of circus clowns, known wo ...

  2. 【题解】poj1639[2018.8.24校赛 最小生成树 A]Picnic Planning 最小度限制生成树

    题目链接 Description The Contortion Brothers are a famous set of circus clowns, known worldwide for thei ...

  3. POJ1629:picnic planning

    题目描述 矮人虽小却喜欢乘坐巨大的轿车,轿车大到可以装下无论多少矮人.某天,N(N≤20)个矮人打算到野外聚餐.为了 集中到聚餐地点,矮人A 有以下两种选择 1)开车到矮人B家中,留下自己的轿车在矮人 ...

  4. POJ 1639 Picnic Planning:最小度限制生成树

    题目链接:http://poj.org/problem?id=1639 题意: 给你一个无向图,n个节点,m条边,每条边有边权. 让你求一棵最小生成树,同时保证1号节点的度数<=k. 题解: 最 ...

  5. pku 1639 Picnic Planning 最小度限制生成树

    http://poj.org/problem?id=1639 题意: 见黑书. 思路: 最小限制树模板题: #include <iostream> #include <cstdio& ...

  6. poj1639 Picnic Planning 最小度数限制生成树

    题意:若干个人开车要去park聚会,可是park能停的车是有限的,为k.所以这些人要通过先开车到其它人家中,停车,然后拼车去聚会.另外,车的容量是无限的,他们家停车位也是无限的. 求开车总行程最短. ...

  7. Picnic Planning POJ - 1639(度限制生成树)

    解题报告 题意理解 给定一张N个点,M个边的无向图,求出无向图的一颗最小生成树,但是我们要求一号节点的入度不可以超过给定的整数S 也就是一个最小生成树,要求它的一号节点,最多只能和S个节点相连. 思路 ...

  8. 《算法竞赛进阶指南》0x62 T2 Picnic Planning

    题目传送门 题目描述 一群小丑演员,以其出色的柔术表演,可以无限量的钻进同一辆汽车中,而闻名世界. 现在他们想要去公园玩耍,但是他们的经费非常紧缺. 他们将乘车前往公园,为了减少花费,他们决定选择一种 ...

  9. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  10. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

最新文章

  1. 分布式系统咋做同步?虐死人!
  2. 成功解决Eclipse窗口布局混乱或者Eclipse窗口布局出现单独独立小窗口的问题(图文教程)
  3. 众人拾柴火焰高,pmcaff捐助者答谢列表。
  4. OKWatchDog 打造一个安全的容器类
  5. art-template入门(四)之调试
  6. 音频编码解码器库 libZPlay
  7. linux下环境变量PATH的用法
  8. 银行工作中有哪些需要注意的事?
  9. 泛微OA项目引入jar包说明
  10. Linux-unit-10-11-日志,IP
  11. 第一节:分布式文件系统(DFS,Distributed File System)
  12. CTF---Web入门第二题 上传绕过
  13. 天翼校园网连接不上服务器无响应,天翼校园网dns解析出错怎么办
  14. 内存溢出错误:java堆空间
  15. 离散数学及其应用傅彦pdf_离散数学及其应用 傅彦 等 高等教育出版社
  16. 手机数控模拟器安卓版_手机cnc加工模拟器中文版下载-cnc加工模拟器手机版 1.1.4 安卓版-玩友游戏网...
  17. Web服务器(01)——介绍web服务器
  18. 行业分析报告-全球与中国客户调查软件市场现状及未来发展趋势
  19. Saas应用领域与行业前景
  20. MATLAB相干成像系统,Matlab光学仿真课程设计-基于Matlb相干与非相干照明成像系统的仿真.docx...

热门文章

  1. 好程序员分享js实现简单的板球游
  2. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?...
  3. 读书笔记 计算机系统--系统架构与操作系统的高度集成 第二章处理器体系结构...
  4. 在webconfig中写好连接后,在程序中如何调用?
  5. C++中利用输入输入流进行一行输入
  6. Java 软件实践 VZone PPT Show 一次及其Perfect的演示
  7. SQL的3种连接查询
  8. springAOP(Aspect)权限访问页面
  9. CentOS 7 配置DHCP服务器
  10. 《挑战程序设计竞赛》---算法高级篇