【BZOJ5100】[POI2018]Plan metra 构造
【BZOJ5100】[POI2018]Plan metra
Description
Input
Output
Sample Input
6 6 2 2 1
5 3 5 1 4
Sample Output
1 5 2
5 7 1
5 2 4
7 3 3
1 4 2
1 6 1
题解:如果我们已经确定了点1到点n的距离,那么我们就可以将1到n这条路拿出来,然后其他点都想挂链一样挂到这条路径上即可。即:
如果1到n的长度是m,我们将所有d1-dn相同的点放到一起,那么对于每组d1-dn相同的点,要么|d1-dn|=m,要么d1+dn的最小值=m。所以用数组记录一下即可。
输出方案的时候将所有d1+dn=m的点排个序即可。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N=500010;
const int M=1000010;
int n,m,tot,cnt;
int d1[N],d2[N],s1[M<<1],s2[M<<1],p[M],mn[M<<1],pa[N],pb[N],pc[N];
inline char nc()
{static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int rd()
{int ret=0,f=1; char gc=nc();while(!isdigit(gc)) {if(gc=='-') f=-f; gc=nc();}while(isdigit(gc)) ret=ret*10+(gc^'0'),gc=nc();return ret*f;
}
inline int abs(int x) {return x>0?x:-x;}
inline bool check(int x)
{if(((x>=M||x<=-M)?0:(s1[M+x]+s1[M-x]))+s2[x]==n-2){m=x;return 1;}return 0;
}
inline void add(int a,int b,int c)
{pa[++cnt]=a,pb[cnt]=b,pc[cnt]=c;
}
int main()
{n=rd();if(n==2){printf("TAK\n1 2 1");return 0;}register int i,last;for(i=2;i<n;i++) d1[i]=rd();for(i=2;i<n;i++){d2[i]=rd();int &t=mn[d2[i]-d1[i]+M];if(!t||d1[t]+d2[t]>d1[i]+d2[i]) t=i;s1[d2[i]-d1[i]+M]++;}for(i=2;i<n;i++) if(i==mn[d2[i]-d1[i]+M]) s2[d1[i]+d2[i]]+=s1[d2[i]-d1[i]+M];for(i=2;i<n;i++) if(check(abs(d2[i]-d1[i]))||check(d1[i]+d2[i])) break;if(!m){puts("NIE");return 0;}for(i=2;i<n;i++){if(d2[i]-d1[i]==m) add(i,1,d1[i]);else if(d1[i]-d2[i]==m) add(i,n,d2[i]);else if(i==mn[d2[i]-d1[i]+M]) p[d1[i]]=i;else{int t=mn[d2[i]-d1[i]+M];add(i,t,(d1[i]+d2[i]-d1[t]-d2[t])>>1);}}p[m]=n,d1[n]=m;for(last=i=1;i<=m;i++) if(p[i]) add(last,p[i],d1[p[i]]-d1[last]),last=p[i];for(i=1;i<n;i++) if(pc[i]<=0){puts("NIE");return 0;}puts("TAK");for(i=1;i<n;i++) printf("%d %d %d\n",pa[i],pb[i],pc[i]);return 0;
}//6 2 5 4 8 4 1 6 4
转载于:https://www.cnblogs.com/CQzhangyu/p/7954085.html
【BZOJ5100】[POI2018]Plan metra 构造相关推荐
- 【bzoj5100】[POI2018]Plan metra 构造
题目描述 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度. 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树. 输入 第一行包含一个正 ...
- Plan Stitch:一种使用缝合物理计划解决查询计划性能退化问题的方法
Part 1 论文背景 查询优化器选择了一个糟糕的执行计划而导致查询性能下降,是工作负载中的一个常见痛点.查询计划可能会因为各种原因而改变,比如创建删除索引.统计信息时,使用与上次不同的参数绑定重新编 ...
- Graph Plan
Graph Plan 一.结构 二.Mutex Condition 三.示例 一.结构 action-level i:在某个时间i可能执行的操作 state-level i:字面量在某个时间i为真 e ...
- 【Dex-Net 2.0】论文精度:Deep Learning to Plan Robust Grasps with Synthetic Point Clouds and Analytic Grasp
Dex-Net 2.0: Deep Learning to Plan Robust Grasps with Synthetic Point Clouds and Analytic Grasp Metr ...
- LeetCode简单题之构造矩形
题目 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 你设计的矩形 ...
- 兑换量子计算机,阅读 | 【量子计算机】构造置换量子门
原标题:阅读 | [量子计算机]构造置换量子门 量子计算机的一个基本组成单位叫量子门(quantum gate),下面简单介绍些基本概念. 量子比特和量子态 量子计算机的信息存储单元是一种叫做量子比特 ...
- [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...
主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...
- js把base64串解析成中文_回文问题终极篇:最小代价构造回文串
学算法认准 labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? 读完本文,你可以去力扣完成第 1312 题「让字符串成为回文串的最少插入次数」,难度 Hard. 回文串就是正着读反着 ...
- php构造和析构方法,php5构造函数与析构函数实例
自php5起,有了构造函数与析构函数. 这使得php更富有面向对象的魅力了. 在php4时,构造函数用的是与类同名的函数来进行构造这个动作. 例如: 复制代码 代码示例: /* * myclass.p ...
- 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!
构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...
最新文章
- 半年时间学linux,你学Linux入门用了多长时间?
- 五大场景深解无服务器架构如何实践?
- 利用memcached做缓存服务器,为后端tomcat服务器做会话保持,利用httpd的jk模块模块做负载均衡...
- mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
- 任务太多?学着突破重围
- python获取eth0_详解 Python 获取网卡 IP 地址的黑魔法
- LocalDate,LocalDate,LocateDateTime的常用方法
- 《基于机器视觉的高压输电线路覆冰厚度检测》论文笔记
- Ajax中readyState和status
- Linux: vi 编辑器
- powerbuilder的dw中使用graph风格,当横轴是日期时,如何显示才能完整显示日期?
- python学习笔记(九)异常处理
- 密码应用安全性评估实施要点之二密码技术应用要求与实现要点(4)
- 用ARIMA模型做需求预测
- 511遇见易语言API模块进程创建CreateProcess
- Unity3D之SQLite的使用
- 机器学习 | 决策树原理剪枝连续值缺失值处理
- CAD中如何更改标注尺寸保留小数点后几位或单位
- 间接采购品类多,机械制造企业如何破局制胜优化间采管理?
- 高性能至强融核服务器,内存达1.5TB!英特尔展示至强融核主板
热门文章
- spark 部署方式
- 营山天气预报软件测试,营山天气预报15天
- Hyperledger Fabric教程(3)-- byfn.sh分析-生成通道所需交易和文件
- kubernetes视频教程笔记 (31)-安全-鉴权Authorization
- 无缝衔接的人会遭报应吗_王栎鑫回应新恋情,如何判断你的伴侣会不会无缝衔接...
- Java中递归复制多级文件夹(IO流)
- 基于SSM的理财系统
- 设计模式之GOF23备忘录模式
- C语言冒泡排序三种写法,冒泡排序的三种实现方法
- php 有request,php实现httpRequest的方法