题目

因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍。

很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条。因为施工队伍有限,省长要求用尽量少的道路将所有的城市连通起来,这样施工量就可以尽量少。不过,省长为了表示自己的公正无私,要求在满足上述条件的情况下,选择一种方案,使得该方案中最贵道路的价格和最便宜道路的价格的差值尽量小,即使这样的方案会使总价提升很多也没关系。

小X 现在手忙脚乱,希望你帮帮他。

分析

我们将边按权值从小到大排序

将边一条条加入,

当当前边的两个端点在原树中有路径相连时,如果加入的当前边,就会形成一个环,

所以将当前边的两个端点在原树中的路径中的最大一条边删掉,这样就能保证差值尽量小。

然后,如果形成了一棵树,就将当前边的边权(因为排了序,当前边的边权一定最大)-树中最小的边权来更新答案。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=3005;
using namespace std;
int k,n,m,fa[N*N*2],a[N][N*2],ans;
int z[8][2]=
{
{-1,0},
{0,-1},
{1,0},
{0,1},
{-1,1},
{1,-1},
{1,1},
{-1,-1}
};
int pos(int x,int y)
{
return (x-1)*m*2+y;
}
int get(int x)
{
if(fa[x]==x) return x;
fa[x]=get(fa[x]);
return fa[x];
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n*m*2;i++) fa[i]=i;
for(k=k;k>=1;k--)
{
int x,y;
scanf("%d%d",&x,&y);
int xx=x,yy=y+m;
bool q=true;
for(int i=0;i<=7 && q;i++)
if(a[x+z[i][0]][(y+z[i][1]-1+2*m)%(2*m)+1])
{
int xf=get(pos(x+z[i][0],(y+z[i][1]-1+2*m)%(2*m)+1));
for(int j=0;j<=7 && q;j++)
if(a[xx+z[j][0]][(yy+z[j][1]-1+2*m)%(2*m)+1])
{
int yf=get(pos(xx+z[j][0],(yy+z[j][1]-1+2*m)%(2*m)+1));
if(xf==yf) q=false;
}
}
if(q)
{
a[x][y]=a[xx][yy]=1;
for(int i=0;i<=7;i++)
if(a[x+z[i][0]][(y+z[i][1]-1+2*m)%(2*m)+1])
{
int xf=get(pos(x+z[i][0],(y+z[i][1]-1+2*m)%(2*m)+1));
fa[xf]=pos(x,y);
}
for(int j=0;j<=7;j++)
if(a[xx+z[j][0]][(yy+z[j][1]-1+2*m)%(2*m)+1])
{
int yf=get(pos(xx+z[j][0],(yy+z[j][1]-1+2*m)%(2*m)+1));
fa[yf]=pos(xx,yy);
}
ans++;
}
}
cout<<ans<<endl;
}

【NOIP2014模拟8.24】小X 的道路修建的更多相关文章

  1. 冲刺NOIP2015提高组复赛模拟试题(五)2.道路修建

    2.道路修建 描述 Description liouzhou_101最悲痛的回忆就是NOI2011的道路修建,当时开了系统堆栈,结果无限RE… 出于某种报复心理,就把那题神奇了一下: 在 Z星球上有N ...

  2. JZOJ 3928. 【NOIP2014模拟11.6】射击

    3928. [NOIP2014模拟11.6]射击 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 有问题, ...

  3. 模拟XShell的小项目

    不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可 ...

  4. 常用Java API之Ramdom--用代码模拟猜数小游戏

    常用Java API之Ramdom Ramdom类用来生成随机数字.使用起来也是三个步骤: 1.导包 import java.util.Random; 2.创建 Random r = new Rand ...

  5. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  6. JZOJ 3927. 【NOIP2014模拟11.6】可见点数

    3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...

  7. quailty's Contest #1 道路修建 EXT(启发式合并)

    题目链接  道路修建 EXT 考虑并查集的启发式合并,合并的时候小的子树的根成为大的子树的根的儿子. 可以证明这样整棵树的深度不会超过$logn$. 两个根合并的时候,产生的新的边的边权为当前的时间. ...

  8. P4878 道路修建-美国

    http://www.tyvj.cn/p/4878道路修建 我想我经大神点拨后终于明白了...回学校再写吧 时间限制:1s 内存限制:256MB [问题描述] A国是一个商业高度发达的国家.它包含了n ...

  9. A1. 道路修建 Small(BNUOJ)

    A1. 道路修建 Small Time Limit: 1000ms Memory Limit: 131072KB 64-bit integer IO format: %lld      Java cl ...

随机推荐

  1. [转] JavaScript学习:BOM和DOM的区别和关联

    BOM 1.  BOM是Browser Object Model的缩写,即浏览器对象模型. 2.  BOM没有相关标准. 3.  BOM的最根本对象是window. 从1可以看出来:BOM和浏览器关系 ...

  2. java:JQuery(声明,JQ和JS对象的区别,prop,attr,addClass,offset,trigger,dblclick和change事件,hide,show,toggle,slideUp,slideDown,slideToggle,三种选择器,标签的获取,三张图片的放大与缩小)

    1.JQuery: jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计 的宗旨是“ ...

  3. vsftp新建用户及目录时遇到的坑

    1.有关vsftp配置及用户权限设置,请参考: http://blog.sina.com.cn/s/blog_3edc5e2e0102vzv8.html 2.需求:公司另一部门要求单独建一目录,来存在 ...

  4. linux 设备树中 dwc3 节点的phys参数含义

    找了好久今天找到了,记录一下: &dwc3_0 { ... phys = <&lane3 PHY_TYPE_USB3 1 2 26000000>; ... } Requir ...

  5. vue-cli 3 ----- 项目频繁发送‘sockjs-node/info’请求

    在vue-cli3跑项目时发现了这个问题,浏览器一直在频繁发送这个请求,导致联调时很不方便,而且本地开发时项目也不能实时更新. 看了网上很多的 (1)  解决方案, 大多都是直接去node_modul ...

  6. 使用UI Automation实现自动化测试--1-4

    Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active ...

  7. java操作ElasticSearch(es)进行增删查改操作

    有时间是要了解一下ES这个东西的~ ---------------------------------------------------------------------------------- ...

  8. kafka 教程(一)-初识kafka

    消息队列 MQ 消息队列就是 消息 message 加 队列 queue,是一种消息传输的容器,提供生产和消费 API 来存储和获取消息. 消息队列分两种:点对点(p2p).发布订阅(pub/sub) ...

  9. django-restframework使用

    安装restframework: pip install djangorestframework 修改项目settings.py: INSTALLED_APPS = [ 'django.contrib ...

  10. [WPF]使用CheckAccess检测是否在控件的ui线程上执行

    private void Parallel(object sender, RoutedEventArgs e) { Task.Run(() => ChangeColour(Brushes.Red ...