最小生成树算法简单

只是增加了一些新的东西,对于需要最小生成树算法 和中 并检查使用的一系列 还有一些更深入的了解。

方法的一些复杂问题

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 1005; struct point
{
int x;
int y;
}pp[maxn];
struct edge
{
int s;
int e;
int dist;
}l[maxn*maxn];
int n,q,m;
int p[maxn];
vector<int> g[10];
int c[10];
int distance_(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int cmp(edge a,edge b)
{
return a.dist < b.dist;
}
int find_(int x)
{
return p[x]==x?x:p[x]=find_(p[x]);
}
bool merge_(int a,int b)
{
int x=find_(a);
int y=find_(b);
if(x==y) return false;
p[x]=y;
return true;
}
int kruskal()
{
int ans=0;
int num=0;
for(int i=0;i<m&&num<n-1;i++)
{
if(merge_(l[i].s,l[i].e))
{
num++;
ans+=l[i].dist;
}
}
return ans;
}
void solve()
{
for(int i=0;i<=n;i++) p[i]=i;
int ans = kruskal();
for(int s=1;s<(1<<q);s++)
{
int cost=0;
for(int tt=0;tt<=n;tt++) p[tt]=tt;
for(int j=0;j<q;j++)
{
if(!((s>>j)&1)) continue;
cost+=c[j];
for(int k=0;k<g[j].size();k++)
{
merge_(g[j][k],g[j][0]);
}
}
ans=min(ans,cost+kruskal());
}
printf("%d\n",ans);
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
for(int i=0;i<10;i++) g[i].clear();
for(int i=0;i<q;i++)
{
int cnt;
scanf("%d%d",&cnt,&c[i]);
int a;
for(int j=0;j<cnt;j++)
{
scanf("%d",&a);
g[i].push_back(a);
}
}
for(int i=1;i<=n;i++)
{
scanf("%d%d",&pp[i].x,&pp[i].y);
}
m=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
l[m].s=i;
l[m].e=j;
l[m++].dist=distance_(pp[i],pp[j]);
}
}
sort(l,l+m,cmp);
solve();
if(t) printf("\n");
}
return 0;
}

鉴于需要使用几个选项 枚举子 算法。

在上面的解决方法。它使用的二进制计数的方法的帮助的一个子集。枚举算法的子集只适用于相对小的一组元素的。

采取结构上述表示的方法edge该方法,与其说开放数组。我觉得跟结构可以更可读的代码。

uva 1151 - Buy or Build poj 2784 Buy or Build(最小生成树)的更多相关文章

  1. POJ(2784)Buy or Build

    Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1369   Accepted: 542 Descr ...

  2. Poj(2784),二进制枚举最小生成树

    题目链接:http://poj.org/problem?id=2784 Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  3. Buy or Build (poj 2784 最小生成树)

    Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1348   Accepted: 533 Descr ...

  4. UVA 1151 Buy or Build MST(最小生成树)

    题意: 在平面上有n个点,要让所有n个点都连通,所以你要构造一些边来连通他们,连通的费用等于两个端点的欧几里得距离的平方.另外还有q个套餐,可以购买,如果你购买了第i个套餐,该套餐中的所有结点将变得相 ...

  5. UVA 1151 Buy or Build (最小生成树)

    先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. ...

  6. POJ 2828 Buy Tickets(排队问题,线段树应用)

    POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意:  排队买票时候插队.  给出一些数对,分别代表某个人的想要插入的位 ...

  7. poj 2828 Buy Tickets(树状数组 | 线段树)

    题目链接:poj 2828 Buy Tickets 题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值. 解题思路:第K大元素,非常巧妙,将人入 ...

  8. poj 2828 Buy Tickets 【线段树点更新】

    题目:id=2828" target="_blank">poj 2828 Buy Tickets 题意:有n个人排队,每一个人有一个价值和要插的位置,然后当要插的位 ...

  9. 线段树(单点更新) POJ 2828 Buy tickets

    题目传送门 /* 结点存储下面有几个空位 每次从根结点往下找找到该插入的位置, 同时更新每个节点的值 */ #include <cstdio> #define lson l, m, rt ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0808打印链表

     题目

  2. Android开发10.1:UI组件适配器AdapterView(创建ListView,Adapter接口)

    @version:Android4.3 API18 @author:liuxinming 概述               AdapterView继承了ViewGroup,它的本质是容器       ...

  3. Linux下基于Erlang的高并发TCP连接压力实验

    1.实验环境: 联想小型机: 操作系统:RedHat Enterprise LinuxServer release6.4(Santiago) 内核版本号:Linux server1 2.6.32-35 ...

  4. C# - 委托_求定积分通用方法

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  5. Ch02 从零开始实例学习3

    提纲:---------------------------- 演练2-3:添加控制器 知识点2-3:控制器的职责 知识点2-4:控制器的类别与方法 ------------------------- ...

  6. c#引用web.config中的ConnectionString

    c#引用web.config中的ConnectionString <connectionStrings>  <add name="JKXTConnectionString& ...

  7. 【linux】 Makefile之make menuconfig /uImage

      欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http: ...

  8. 技术回归01-Windows内存分配工具

    很久没有写技术方面的东西了,这半年主要是在学习别人的东西,对自己提高比较大,算是一次技术回笼吧,这次学习之旅目的是结束技术方面的专注,开始向应用方面找突破口,也就是完成技术积累或者为技术的积累做坚实的 ...

  9. Windows Azure 数据安全(清理和泄漏)

    免责声明:本文档中所述过程为 2012 年 1 月时起的情况,如有变更,恕不另行通知. 希望将应用程序部署到 Windows Azure 的企业客户(实际上是所有客户)最为关心的就是其数据的安全性.释 ...

  10. Kendo UI开发教程(23): 单页面应用(一)概述

    Kendo单页面应用(Single-Page Application,缩写为SPA)定义了一组类用于简化Web应用(Rich Client)开发,最常见的单页面应用为Gmail应用,使用单页面可以给用 ...