`
yzmduncan
  • 浏览: 332914 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Aisa Beijing Regional Contest-2011 Problem A 解题报告

阅读更多

    题意:有n个(n<=1000)城市,坐标都告诉你了,并且每个城市都有人居住,现在要修路n-1条路,使得每个城市都连通。显然,这就是一颗树。当然,边的权值就是两点的距离。条件:有一条边可以不用任何花费。问这条边的两端点的总人数/(包含这条边的最小生成树的总权值-这条边的权值)最大是多少。即(Wa+Wb)/(mst-w(a,b))最大。

    解:其实这题是次小生成树的变形。首先可以想到最小生成树。但最小生成树的边集中的不一定是最大的。考虑n只有10^3,可以枚举两点再求。

    枚举的时候,判断这条边在不在MST上,若在,直接求。若不在呢?是不是类似于次小生成树了?是的。添加这条边后,就会形成环,删去环中第二大的边(分母最小),即MST中从a到b的最大边,再求。记录最大值即可。

    复杂度=求最小生成树的复杂度+边数。可惜没去现场赛。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
const int maxv = 1010;
const int maxe = maxv*maxv;
int n;
int p[maxv];
double Max[maxv][maxv];
int pos[maxv][2],peo[maxv];

struct Edge		//原始图
{
	int from;
	int to;
	double w;
	bool flag;
}e[maxe];
int m;

struct Tree		//最小生成树
{
	int to;
	double w;
	int next;
}tree[maxv*2];
int head[maxv],num;

struct Node		//生成树的结点
{
	int seq;	//结点编号
	double max;	//从某个点到它的路径中的最大边的长度
};

bool cmp(const Edge &a, const Edge &b)
{
	return a.w < b.w;
}

void makeSet()
{
	for(int i = 0; i <= n; i++)
	{
		p[i] = i;
	}
}

int findSet(int x)
{
	if(x != p[x])
		p[x] = findSet(p[x]);
	return p[x];
}

void addEdge(int from, int to, double w)
{
	tree[num].to = to;
	tree[num].w = w;
	tree[num].next = head[from];
	head[from] = num++;
}

void addEdge2(int from, int to, double w)
{
    e[m].to = to;
    e[m].from = from;
    e[m].w = w;
    e[m].flag = false;
    m++;
}

double kruscal()
{
	int i;
	int x, y;
	int edgeNum = 0;
	double result = 0;
	makeSet();
    sort(e,e+m,cmp);
	for(i = 0; i < m; i++)
	{
		x = findSet(e[i].from);
		y = findSet(e[i].to);
		if(x != y)
		{
			edgeNum++;
			addEdge(e[i].from,e[i].to,e[i].w);
			addEdge(e[i].to,e[i].from,e[i].w);
			e[i].flag = true;
			p[x] = y;
			result += e[i].w;
		}
	}
	return edgeNum == n-1 ? result : -1;
}

void bfs(int p)
{
	bool used[maxv];
	memset(used,0,sizeof(used));
	queue<Node> que;
	Node now,adj;
	now.max = 0;
	now.seq = p;
	que.push(now);
	used[p] = true;
	while(!que.empty())
	{
		Node q = que.front();
		que.pop();
		for(int i = head[q.seq]; i != -1; i = tree[i].next)
		{
			adj.seq = tree[i].to;
			adj.max = tree[i].w;
			if(!used[adj.seq])
			{
				if(q.max > adj.max)
					adj.max = q.max;
				Max[p][adj.seq] = adj.max;
				used[adj.seq] = true;
				que.push(adj);
			}
		}
	}
}

double second_MST()
{
	int i;
	double mst = kruscal();
	for(i = 1; i <= n; i++)
		bfs(i);
	double ans = -1.0;
	for(i = 0; i < m; i++)
	{
	    double tmpt;
		if(!e[i].flag)
		    tmpt = (peo[e[i].from]+peo[e[i].to])*1.0/(mst-Max[e[i].from][e[i].to]);
		else
		    tmpt = (peo[e[i].from]+peo[e[i].to])*1.0/(mst-e[i].w);
        if(ans < tmpt)
            ans = tmpt;
	}
	return ans;
}

double dis(int i, int j)
{
    return sqrt((pos[i][0]-pos[j][0])*(pos[i][0]-pos[j][0])*1.0+(pos[i][1]-pos[j][1])*(pos[i][1]-pos[j][1]));
}

int main()
{
	int i,j;
	int cases;
	scanf("%d",&cases);
	while(cases--)
	{
		scanf("%d",&n);
		m = num = 0;
		memset(head,-1,sizeof(head));
		for(i = 1; i <= n; i++)
            scanf("%d %d %d",&pos[i][0],&pos[i][1],&peo[i]);
        for(i = 1; i <= n; i++)
        {
            for(j = i+1; j <= n; j++)
            {
                double t = dis(i,j);
                addEdge2(i,j,t);
            }
        }
		printf("%.2lf\n",second_MST());
	}
	return 0;
}

 

 

 

分享到:
评论

相关推荐

    WinCC_V7.0 SP3 AISA.txt

    根据提供的文件信息,我们可以深入探讨WinCC_V7.0 SP3 AISA的相关知识点,包括其版本更新、功能特性以及在工业自动化领域的应用等。 ### WinCC V7.0 SP3 AISA简介 #### 1. **WinCC V7.0概述** - **背景与定位**:...

    3D-aisa.zip

    3D-aisa.zip,a is a是一个用typescript编写的软件3d引擎。,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。

    基于混合身份搜索黏菌优化的模糊C-均值聚类算法.pdf

    贾鹤鸣等人提出了一种名为AISA-SMA-FCM的自适应优化算法,该算法结合了AISA和SMA的优点。首先,他们引入AISA的社会机制来改进SMA的全局搜索和局部开发性能,以克服SMA在处理复杂数据时的局限性。接着,将AISA-SMA...

    航天“Aisa”高能离子空气净化系统介绍.pptx

    航天“Aisa”高能离子空气净化系统介绍.pptx

    AISA是一个用TypeScript编写的软件3D引擎。- jdiemke /爱莎

    AISA is a Software 3D Engine written in TypeScript. The only prerequisite for AISA to run properly is a HTML5 compatible web browser and a fast CPU (as you can guess JavaScript is not as fast as ...

    Padrões de Projeto em C # 2012

    Aisa, é uma obra valiosa para desenvolvedores que desejam aprofundar seus conhecimentos sobre os conceitos fundamentais e as melhores práticas na aplicação de padrões de projeto em sua programaç...

    WINCC_V7.0_sp3下载地址.txt

    - A:在某些情况下,WINCC V7.0 SP3可以兼容旧版本的数据和项目文件,但最好事先进行测试以确保兼容性。 ##### Q3:如何解决安装过程中遇到的问题? - A:如果在安装过程中遇到问题,可以参考官方文档中的故障排除...

    Kuhong-V4:比萨·马克尼亚(Aisa Bake Makenya Aja)

    酷红V4 重新编码SC:Nurutomo 笔记 : JANGAN UBAH NAMA BOT BIAR BOTNYA GAK RUSAK! 对于TERMUX用户 &gt; pkg update && pkg upgrade &gt; pkg install git -y &gt; pkg install nodejs -y &gt; pkg install ffmpeg -y ...

    安全工具 360Safe

    工具 360Safe

    asia conserved

    ### 《Asia Conserved》:文化遗产保护的宝贵经验 #### 一、背景介绍与意义 《Asia Conserved》是一本由联合国教科文组织(UNESCO)曼谷亚太办事处出版的书籍,它记录了2000年至2004年间在亚太地区实施的文化遗产...

    WINCC V7.0安装及其授权步骤

    此文档针对WENCC V7.0的安装方法与授权方法,并含有具体学习网址

    wincc 6.0 sp3授权

    wincc共享资源,希望在工作上可以帮到你。

    abap所有模块用户接口(普通下载)

    - AINT0001:记帐资产时的扩展检查 - AISA0001:分配库存号 - ATP00001:有效检查的用户出口 每个用户出口都有其特定的用途,根据业务需求选择合适的出口进行定制化开发。要成功利用这些用户出口,需要具备 ABAP/4 ...

    TransCAD四阶段法基本操作步骤[定义].pdf

    然后,选择坐标系统为 Aisa,China HongKong1980 Grid,单位为 kilometers。 第二步:新建路网层 在 TransCAD 中,新建路网层可以通过 New - Geographic File 选择 Line Geographic File 来实现。在这里,我们...

    利用docker部署nextcloud 网盘的方法步骤

    使用`docker ps -a`检查容器是否已启动。成功启动后,可以通过浏览器访问Nextcloud,URL通常是`http://localhost`。 6. **初始化NextCloud**: 首次访问NextCloud时,系统会引导你进行初始化设置,包括管理员...

    wincc v7.0 sp2亚洲版安装及破解

    wincc7.0 SP2亚洲版安装注意事项及破解。

    dohq-ai-best-practices:PT Application Inspector的实施和操作。 更多细节

    DevSecOps:将PT应用程序检查器实施到产品管道和运营中注意力! 这是DevOps工程师的非官方文档。 在这里,您将找到推荐的服务器...Media / ptaiee_adminguide_ru.pdf)内容使用AISA的工作算法用于发送项目以扫描到AI的

    经典稳重素材PPT模板.pptx

    11. **总结与结论**:“in a word, there`re lots of people will go the the Aisa”表明总结和提炼关键点的重要性。在PPT末尾总结要点,强化观众记忆。 综上所述,创建一个经典稳重的PPT模板需要综合考虑设计美学...

    wincc 7.3 破解文件

    wincc7.3 crack 破解 ,,工程实践,,本人购买,,

Global site tag (gtag.js) - Google Analytics