[bzoj5100][构造]Plan metra

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出 MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。 阅读详情

Description

有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。
已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。

Input

第一行包含一个正整数n(2<=n<=500000),表示点数。
第二行包含n-2个正整数d(1,2),d(1,3),…,d(1,n-1),分别表示每个点到1的距离。
第三行包含n-2个正整数d(n,2),d(n,3),…,d(n,n-1),分别表示每个点到n的距离。
输入数据保证1<=d<=1000000。

Output

若无解,输出NIE。 否则第一行输出TAK,接下来n-1行每行三个正整数u,v,c(1<=u,v<=n,1<=c<=1000000)
表示存在一条长度为c的连接u和v两点的树边。 若有多组解,输出任意一组。

Sample Input

7

6 6 2 2 1

5 3 5 1 4

Sample Output

TAK

1 5 2

5 7 1

5 2 4

7 3 3

1 4 2

1 6 1

题解

要拍的qq滴滴我呀
你就找到树上1~n的那条链
然后在这条链上插点…
特判的话
看我代码!

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#define LL long long
#define mp(x,y) make_pair(x,y)
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
inline void write(int x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
inline void print(int x){write(x);printf(" ");}
struct Nod{int d1,d2,dd,op;}w[510000];int n;
struct edge
{
	int u,v,c;
	edge(){}
	edge(int _u,int _v,int _c){u=_u;v=_v;c=_c;}
}e[510000];int len;
bool cmp(Nod n1,Nod n2){return n1.d1<n2.d1;}
bool cmp1(Nod n1,Nod n2){return (n1.d1-n1.dd)<(n2.d1-n2.dd);}
bool v[510000];
int sta[510000],tp,dis[510000];
int main()
{
// freopen("a.in","r",stdin);
//	freopen("5100.out","w",stdout);
	n=read();
	if(n==2){puts("TAK\n1 2 1\n");return 0;}
	for(int i=1;i<n-1;i++)w[i].d1=read();
	for(int i=1;i<n-1;i++)w[i].d2=read(),w[i].op=i+1;
	if(w[1].d1!=w[1].d2)
	{
		int val=abs(w[1].d1-w[1].d2);int i;
		for(i=2;i<n-1;i++)
			if(abs(w[i].d1-w[i].d2)!=val)break;
		if(i==n-1) 
		{
			puts("TAK");
			printf("1 %d %d\n",n,val);
			for(i=1;i<n-1;i++)
			{
				if(w[i].d1<w[i].d2)printf("1 %d %d\n",w[i].op,w[i].d1);
				else printf("%d %d %d\n",n,w[i].op,w[i].d2);
			}
			return 0;
		}
	}
	int u=999999999;
	sort(w+1,w+1+n-2,cmp);
	for(int i=1;i<n-1;i++)u=min(w[i].d1+w[i].d2,u);
	memset(v,false,sizeof(v));v[1]=v[n]=true;
	w[n-1].d1=0;w[n-1].d2=u;w[n-1].op=1;
	w[n].d1=u;w[n].d2=0;w[n].op=n;
	int last=n-1;sta[tp=1]=1;dis[1]=0;
	for(int i=1;i<n-1;i++)
		if(w[i].d1+w[i].d2==u)v[w[i].op]=true,e[++len]=edge(w[last].op,w[i].op,w[i].d1-w[last].d1),last=i,sta[++tp]=w[i].op,dis[tp]=w[i].d1;
	e[++len]=edge(w[last].op,w[n].op,u-w[last].d1);
	sta[++tp]=n;dis[tp]=u;
	for(int i=2;i<=tp;i++)if(dis[i]==dis[i-1]){puts("NIE");return 0;}
	for(int i=1;i<n-1;i++)
	{
		if((w[i].d1+w[i].d2-u)%2){puts("NIE");return 0;}
		w[i].dd=(w[i].d1+w[i].d2-u)/2;
	}
	sort(w+1,w+1+n-2,cmp1);
	int j=1;
	for(int i=1;i<n-1;i++)if(!v[w[i].op])
	{
		while(j<tp&&dis[j]<w[i].d1-w[i].dd)
			j++;
		if(dis[j]==w[i].d1-w[i].dd)
		{
			e[++len]=edge(w[i].op,sta[j],w[i].dd),v[w[i].op]=true;
			//printf("YES %d %d %d\n",j,w[i].op,w[i].d1-w[i].dd);
		}
		//else printf("NO %d %d %d\n",j,w[i].op,w[i].d1-w[i].dd);
	}
	if(len!=n-1)puts("NIE");
	else 
	{
		puts("TAK");
		for(int i=1;i<=len;i++)printf("%d %d %d\n",e[i].u,e[i].v,e[i].c);
	}
	return 0;
}
Exposure Fusion MertensTMO原理详解: 文章:2007年Exposure Fusion 论文链接:http://ntp-0.cs.ucl.ac.uk/staff/j.kautz/publications/exposure_fusion.pdf 论文代码:C版本:https://github.com/JawThrow/ExposureFusion python版本:https://github.com/lzocro/Exposure-Fusion matlab版本:https://github.com/Mericam 阅读详情

相关推荐

用UltraISO制作镜像以RAW格式刻录系统到U盘后,在Windows上无法识别的解决办法

在这篇文章中,用UltraISO制作镜像后,会使得U盘无法识别!!!那么,如何抹掉U盘的数据,格式化U盘呢?

拥抱具身智能,昇腾Ascend C 2719

洛谷 2320 & bzoj 1192 题解 (思维,构造)

原题链接: 洛谷 bzoj 题意简述 给定一个n(&lt;=1e9)n(&lt;=1e9)n(<=1e9),构造一个序列使得: [1,n][1,n][1,n]中所有整数是这个序列中某些元素的和 字典序最小 输出这个序列 思路 我们一开始认为:nnn是1e91e91e9,这个序列怎么也是1e81e81e8,但是为什么还要输出呢?不是要OLEOLEOLE。。。 仔细想想,并不...

LightningUZ的博客 296

PaddleOCR实战指南:从环境搭建到自定义模型训练

本文提供了PaddleOCR从环境搭建到自定义模型训练的完整实战指南。详细介绍了使用Anaconda或Docker搭建稳定开发环境、准备与标注数据集、进行文本检测与识别模型训练的核心步骤与参数调优技巧,并分享了数据增强、模型微调及解决实际项目难题的实用方法,帮助开发者高效掌握PaddleOCR应用。

gold的博客 637

BZOJ 3101(N皇后-N皇后O(n)构造一组解的方法)

3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 70  Solved: 32 [Submit][Status] Description n*n的棋盘,在上面摆下n个皇后,使其两两间不能相互攻击… Input 一个数n Output

nike0good |Oier&ACMer | 熟能生巧 2929

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2757

DIY必备:如何用N-MOS管搭建低成本DC有刷电机驱动电路(附原理图+避坑指南)

本文详细介绍了如何使用N-MOS管搭建低成本、高可靠性的DC有刷电机驱动电路。针对DIY爱好者,从核心原理、电路设计、元件选型到焊接调试,提供了完整的实战指南,并重点解析了续流二极管选型、栅极驱动设计等关键避坑要点,帮助读者成功驱动电机并确保电路稳定运行。

delta的博客 760

bzoj5100 [POI2018]Plan metra 构造+二分

Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 第一行包含一个正整数n(2&lt;=n&lt;=500000),表示点数。 第二行包含n-2个正整数d(1,2),d(1,3),…,d(1,n-1),分别表示每个点到1的距离。 第三行包含n-2个正整数d(...

olahiuj的博客 208

医药领域知识图谱快速及医药问答项目(项目全过程)

该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg · GitCode 一、项目环境搭建 该部分要十分注意,由于版本升级的问题,一些用法及格式已经不兼容了。 python3.8 下载地址:Python Release Python 3.8.10 | Python.orght...

qq_52062182的博客 9911

[BZOJ4790][构造] CERC 2016 D. Dancing Disks

CERC2016 D题题意有个6*6的棋盘,刚开始在(1,1)这个点有n个棋子叠起来(棋子大小无序),你可以从顶部移动任意多个棋子到相邻的位置,但是只能向下或者向右移动,要求你构造一种移动方法使所以棋子移动到(6,6)并且棋子大小从底向上降序Sample input 6 1 6 5 4 3 2 output 1 1 D 6 2 1 D 6 4 1 D 6 5 1 D 6 6 1 R

CE玩家 1069

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比)

本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。

weixin_28717807的博客 337

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割

Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。

盼小辉丶的博客 1万+

[BZOJ3119]Book 构造

假设全部都是+A。那么M-N * X=A * N * (N-1) / 2。 有-B的话就会减去一些,M-N * X=A * N * (N-1) / 2 - d * (A + B)。 d为-B贡献的系数,-B发生在第i个和第i+1个中时,贡献-B*(n-i)。于是解出d,找到d的一种拆分方案即可。 代码:#include<iostream> #include<cstdio> #define ll

DOFYPXY的博客 503

一键开关机电路

一键开关机电路

让你爱上电路设计 4163

【BZOJ5100】[POI2018]Plan metra 构造

【BZOJ5100】[POI2018]Plan metra Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 Input 第一行包含一个正整数n(2<=n<=500000),表示点数。 第二行包含n-2个正整数d...

aodanchui1057的博客 135

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

bzoj 5100: [POI2018]Plan metra 构造

题意 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 2&lt;=n&lt;=500000 分析 先把1到n路径上的节点找出来。 这里分两种情况,一种是1到n有连边。这种情况特判一下就好。 另一种是1到n没有连边,那么就找出其路径上的点,然后对于其他每个点,很容...

beginend 364

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

BZOJ5100[POI2018]Plan metra 构造

首先可以发现在11到nn的链上的点的d1+d2d1+d2是最小的 这样我们可以求出11到nn的链 对于其他的点 他一定与这条链的上点链接 可以发现 对于点ii 和11到nn上的点j 有d1[i]−d2[i]=d1[j]−d2[j]d1[i]-d2[i]=d1[j]-d2[j] 因此可以求出每个点连向谁 如果没有11到nn上符合差值相等的点 就不存在解我一开始用map+sort 无线TLE+RE#

Devil_Gary的博客 725

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BZOJ5100 POI2018Plan metra(构造)

  容易发现要么1和n直接相连,要么两点距离即为所有dx,1+dx,n的最小值。若为前者,需要满足所有|d1-dn|都相等,挂两棵菊花即可。若为后者,将所有满足dx,1+dx,n=d1,n的挂成一条链,其余点直接与链上点相连即可,相连点需要满足dx,1-dx,n=dy,1-dy,n。 #include<iostream> #include<cstdio> #in...

weixin_30642561的博客 115

[构造] BZOJ5100 [POI2018]. Plan metra

一道构造杂题画画图可以发现,把1到n的路径提出来,其他的点都是跟这上面的其中一个点相连的。这个路径就是把点权设为 ai−bia_i-b_i 后排序(除了1和n),然后相同点权中 aia_i 最小(或者 bib_i 最小) 的点一次相连。然后把1和n插到这个序列中。显然序列中1的左边和n的右边最多只有1个点。那么枚举1的左边有几个点,n的右边有几个点,dfs判一判就好了O(n)O(n)#include

CE玩家 414

bzoj5100 [POI2018]Plan metra(树+构造)

构造题,细节较多。 第一次WA:没有判1-n的链上如果d[1][i]相同的话是不合法的。 第二次WA:没有判1-n距离为0的情况是不合法的。 #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 500010 int n,d[2][N],mn...

Icefox的博客 521

bzoj5100 [POI2018]Plan metra 构造

5100: [POI2018]Plan metra Time Limit:40 SecMemory Limit:128 MBSecSpecial JudgeSubmit:189Solved:43[Submit][Status][Discuss] Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 ...

weixin_30246221的博客 120

【bzoj5100】[POI2018]Plan metra 构造

题目描述 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 输入 第一行包含一个正整数n(2<=n<=500000),表示点数。 第二行包含n-2个正整数d(1,2),d(1,3),...,d(1,n-1),分别表示每个点到1的距离。 第三行包含n...

weixin_30872671的博客 112

BZOJ 5100([POI2018]Plan metra-构造法)

有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 (2<=n<=500000),1<=d<=1000000解法:考虑1-n这条路径,如果上面没有其它点,说明都在一侧,特判。 否则上面至少有1个点,可以先求出1-n的距离=mini(d1,i+di,n)min_i(d_{1,i}+

nike0good |Oier&ACMer | 熟能生巧 385

BZOJ5100 [POI2018]Plan metra

标签:构造 题目 题目传送门 Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n−1n−1n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 Input 第一行包含一个正整数n(2≤n≤500000)n(2≤n≤500000)n(2\leq n\leq 500000),表示点数。 第...

Welcome to yjjr's blog! 230

【BZOJ5100】【POI2018】Plan metra

【题目链接】点击打开链接【思路要点】分别考虑1和\(N\)之间是否有边直接相连。若有边相连,所有到1和\(N\)距离的差值的绝对值应该相等。否则,到1和\(N\)距离的和的最小值就是1到\(N\)的距离,将这条链构造出来,将其它点逐一挂在上面即可。时间复杂度\(O(N+D)\)。【代码】#include&lt;bits/stdc++.h&gt; using namespace std; const...

cz_xuyixuan的博客 306

bzoj 5100: [POI2018]Plan metra

题意: 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。 已知2到n-1每个点在树上与1和n的距离,请根据这些信息还原出这棵树。 题解: 构造题。 显然一定有一种合法的方案是1,n间有一条链,然后其它点直接连在这条链上面。 假如我们已经知道了1,n间的距离,那么其它点到这条链的距离就是(d(i,1)+d(i,n)−len)/2(d(i,...

fyc的博客 202
上一篇: [bzoj5102][乱搞]Prawnicy
下一篇: [bzoj4999][树链剖分][动态开点线段树]This Problem Is Too Simple!
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值