ARC103E Tr/ee

首先没有叶子显然不科学,\(s_n\)是1也不怎么科学,\(s_i != s_{n-i}\)同样不怎么科学

特判掉上述情况后先把root记为1,链接(root,i+1)如果\(s_i\)就把root改为i+1

理解一下的话就是对于一个这样的结构

如果\(s_i\)就把它做成一颗紫薯

否则一定要去掉这样的结构

就行了


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm> using namespace std; const int M = 1000001;
int n,m,k,a[M],d[M];
char c[M];
int main()
{
scanf("\n%s",c+1);
n=strlen(c+1);
for(int i=1;i<=n;i++) a[i]=c[i]-'0';
if(!a[1] || a[n])
{
printf("-1");
return 0;
}
int m=n/2;
for(int i=1;i<=m;i++) if(a[i]!=a[n-i])
{
printf("-1");
return 0;
}
k=2;
printf("1 2\n");
for(int i=2;i<=m;i++)
{
printf("%d %d\n",i+1,k);
if(a[i]) k=i+1;
}
for(int i=m+2;i<=n;i++) printf("%d %d\n",i,k);
}

ARC103F Distance Sums

D值大的一定是叶子。

知道了一个点的子树大小以后就可以找到他的父亲的D(D值不重

然后就可以得到一棵树。但是这棵树并不一定合法比如给每个D都加上一个增量

所以最后再check一下


#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
#define LL long long
using namespace std; const int M = 210001;
int n,m,k,a[M],s[M],W,ver[M],nex[M],head[M],cnt;
void add(int x,int y)
{
ver[++cnt]=y, nex[cnt]=head[x], head[x]=cnt;
ver[++cnt]=x, nex[cnt]=head[y], head[y]=cnt;
}
map<LL,int> mp;
struct vv
{
LL x;
int w;
} t[M]; bool cmp(vv a,vv b){return a.x>b.x;}
bool cmp1(vv a,vv b){return a.w<b.w;} LL dfs(int x,int fa,int dp)
{
LL S=s[x];
for(int i=head[x];i;i=nex[i])
{
if(ver[i]==fa) continue;
S+=dfs(ver[i],x,dp+1);
}
return S;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&t[i].x);
t[i].w=i; s[i]=1;
mp[t[i].x]=i;
}
sort(t+1,t+1+n,cmp);
for(int i=1;i<n;i++)
{
LL k=t[i].x+(LL)s[t[i].w]-n+s[t[i].w];
if(k==t[i].x || mp.find(k)==mp.end())
{
printf("-1");
return 0;
}
a[t[i].w]=mp[k];
add(t[i].w,mp[k]);
s[mp[k]]+=s[t[i].w];
}
LL k=dfs(t[n].w,0,0)-n;
if(dfs(t[n].w,0,0)-n!=t[n].x)
{
printf("-1");
return 0;
}
for(int i=1;i<n;i++) printf("%d %d\n",t[i].w,a[t[i].w]);
}

ARC103的更多相关文章

  1. 【AtCoder】ARC103

    C - //// 为了防止一些多余的判断,我选择直接记录每个数的个数,然后枚举第一个数,找第一个数之外第二个数改变最少的情况下应该选什么 代码 #include <bits/stdc++.h&g ...

  2. AtCoder | ARC103 | 瞎讲报告

    目录 ARC 103 A.//// B.Robot Arms C.Tr/ee D.Distance Sums ARC 103 窝是传送门QwQ A.//// 题意 : 给你\(n\)(\(n\)为偶数 ...

  3. Atcoder 乱做

    最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...

  4. NOIP2018前的一些计划&记录(日更)

    先空着,等停课了再开始写. 诸位好,我是yyb.现在显然已经不再是高一的小蒟蒻了,已经升级为了高二的菜鸡了 现在已经不能再每天划划水切切题了,毕竟......已经高二了,所有的机会从高一的两倍全部除了 ...

  5. AtCoder从小白到大神的进阶攻略

    前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了,@ezoixx130大佬已经在去年介绍过CodeForces了(传送门),那么现在我们主要谈一下AtCoder. 简介 ...

  6. AtCoder整理(持续更新中……)

    做了那么久的atcoder觉得自己的题解发的很乱 给有想和我一起交流atcoder题目(或者指出我做法的很菜)(或者指责我为什么整场比赛只会抄题解)的同学一个索引的机会??? 于是写了个爬虫爬了下 A ...

  7. 在$CF$水题の记录

    CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...

  8. Atcoder 题目泛做

    我思维越来越菜了,这样下去感觉要退役了. 听说Atcoder的题练思维?那就试着做一做吧. 坚持每天一两道吧.(很有可能咕掉.) AGC036 官方题解 ---A-Triangle          ...

随机推荐

  1. DNS 放大

    DNS放大攻击是伪造一个DNS查询的报文,源地址改成想要攻击的IP.单个查询的包64字节,如果是ANY类型查询(或者DNSSEC记录),那么回复报文一般会大几十倍.当然,如果攻击者自己制造一个很大的T ...

  2. Java_3.Java帮助文档

    1.Oracle的在线帮助文档 http://docs.oracle.com/javase/8/docs/api 2.jdk源码内容(包含5个部分) [以下内容参考至:https://blog.csd ...

  3. HDU 3622 Bomb Game(2-sat)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 如何多个router 进行合并?

    有时间可能有多个人开发,如果在共用router, 势必会造成合并冲突,可以分开多个router.js ,然后进行合并 // router0.jsconst studyRouter = [ { path ...

  5. django-celery beat报错 error pid

    最近在用django-celery添加定时任务,测试时启动过一次Beat,beat按理说是只能启动一个的但是不服务器都重启过了还是提示已有进程在运行. ERROR: Pidfile (celerybe ...

  6. git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge”

    今天在使用git pull 命令的时候发生了以下报错 目前git的报错提示已经相关友好了,可以直观的发现,这里可以通过commit的方式解决这个冲突问题,但还是想看看其他大佬是怎么解决这类问题的 在网 ...

  7. java应用之solr入门篇

    前言 solr是apache项目的一款全文搜索应用. 官方文档http://lucene.apache.org/solr/guide/6_6/ 入门流程 1.安装   --->  2.启动  - ...

  8. 力扣—climbing stairs(爬楼梯) python实现

    题目描述: 中文: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 英文: You are cl ...

  9. 【vlfeat】O(n)排序算法——计数排序

    今天想在网上找一个实现好的er算法来着,没啥具体的资料,无奈只能看vlfeat的mser源码,看能不能修修补补实现个er. 于是,看到某一段感觉很神奇,于是放下写代码,跑来写博客,也就是这段 /* - ...

  10. 【leetcode】993. Cousins in Binary Tree

    题目如下: In a binary tree, the root node is at depth 0, and children of each depth k node are at depth  ...