[CF611H] New Year and Forgotten Tree 题解

显然我们可以从每种长度中选出来一个点,使得其它点都连向它们,且他们之间相互连通。

首先考虑什么情况下会无解。设 \(e_{i,j}\) 表示长度为 \(i\) 的数和长度为 \(j\) 的数间连的边数还有几条没用,\(d_i\) 表示长度为 \(i\) 的数还剩几个。可以证明,当且仅当存在一个点集 \(S\),满足 \(\sum\limits_{i\in S}d_i\le\sum\limits_{i\in S,j\in S}e_{i,j}\) 时,原图无解。

所以我们每次暴力搜索加哪种边,加完后合不合法即可。

时间复杂度 \(O(2^ww^2n)\),其中 \(w\) 代表最大位数。

#include<bits/stdc++.h>
using namespace std;
int n,a[6][6],b[6],c[6],mn[6],m,mx;
string s;vector<pair<int,int> >g;
int wei(int x){return (int)log10(x);
}int check(){for(int i=0;i<(1<<(mx+1));i++){int sum=0,sm=0;for(int j=0;j<=mx;j++)if((i>>j)&1) sum+=b[j];for(int j=0;j<=mx;j++) if((i>>j)&1)for(int k=0;k<=mx;k++) if((i>>k)&1) sm+=a[j][k];if(sm>=sum&&sum) return 0;}return 1;
}int get(){for(int i=0;i<=mx;i++)for(int j=0;j<=mx;j++){if(!a[i][j]) continue;a[i][j]--,b[i]--;if(b[i]&&check())return g.push_back({mn[i]+b[i],mn[j]}),1;b[i]++,b[j]--;if(b[j]&&check())return g.push_back({mn[i],mn[j]+b[j]}),1;a[i][j]++,b[j]++;}return 0;
}int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n,m=n-1,mn[0]=1,mx=wei(n);for(int i=1;i<=n;i++) b[wei(i)]++;for(int i=1;i<=mx;i++) mn[i]=mn[i-1]*10;for(int i=1,x,y;i<n;i++)cin>>s,x=s.size(),cin>>s,y=s.size(),a[x-1][y-1]++;if(!check()) cout<<-1,exit(0);while(get()) m--;for(int i=0;i<=mx;i++)for(int j=0;j<=mx;j++) if(a[i][j])g.push_back({mn[i],mn[j]}),m--;if(m) cout<<-1,exit(0);for(auto x:g) cout<<x.first<<" "<<x.second<<"\n";return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【主流技术】Spring Boot Starter 的应用场景与自动配置

一般在企业开发中,会有专门的 git 仓库(组)来统一放置各个系统对应的 Starter 项目,其中会包括一个空的框架,拉取下来后我们就可以自己开发了。 在开发之前,我们需要知道常见的使用场景有哪些: 1、API 调用:将某系统的部分功能经过封装后通过 API 暴露出去,方便内部/外…

掌握 K8s Pod 基础应用 (一)

Pod 介绍 Pod结构每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类:用户程序所在的容器,数量可多可少Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:可以以它为依据,评估整个Pod的健康状态可以在根容器上设置Ip地址,其它容器都此Ip(Pod IP),以…

小微企业怎么用CRM系统把客户“管”起来?一篇聊透!

说实话啊,很多小微企业一听到CRM系统,第一反应就是“那玩意适合大公司吧?我们这么小,客户没几个,花钱搞这个干嘛?”但其实,越是小企业,越该用CRM。 为啥?因为客户本来就不多,流失一个心疼死,搞定一个赚翻天,所以,客户管理必须要精细、到位、有方法,而CRM系统,就…

如何解决异地跨区域文件传输难题,提升传输效率?

在当今全球化的商业环境下,越来越多的企业为了拓展业务版图、获取更广泛的资源,纷纷在不同地区设立分支机构。这就使得异地跨区域文件传输成为企业日常运营中不可或缺的环节,从业务数据的共享,到项目资料的传递,都依赖于高效、安全的文件传输。然而,传统的异地跨区域文件…

PostgreSQL 部署全攻略:单机与集群模式详解

前言:在当今数字化浪潮中,数据已成为推动世界前行的核心力量。无论是企业决策、科学研究,还是日常生活的方方面面,数据的存储、管理和分析都扮演着至关重要的角色。而数据库作为数据的“守护者”和“管理者”,其重要性不言而喻。在众多数据库系统中,PostgreSQL 以其卓越的…

AI 智能体引爆开源社区「GitHub 热点速览」

最近很火的 Manus 智能体是一款将你的想法转化为行动的工具,能够处理生活中的各种任务。一经发布便迅速走红,并间接引爆了开源社区。 这也导致上榜的全是 AI 智能体开源项目,比如无需邀请码的开源版 Manus——OpenManus,MetaGPT 团队仅用了 3 个小时就开发出了原型,并在短…

【设计模式】从火车站卖票看代理模式的实际应用

概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理类在编译期就生成,而动态代理代理类则…

【CodeForces训练记录】Codeforces Round 1008 (Div. 2)

训练情况赛后反思 被A题吓了一跳,发现是结论题,C题构造思维定式了,以为一定要凑 \(a_1\),实则可以再找一个超过 \(b_i\) 值域的数 A题 平均数可以倒过来求数列和,所以这题只需要判断数列的和除以 n 是否等于 m 即可点击查看代码 #include <bits/stdc++.h> // #defin…

dotnet Cli sdk 什么是 Terminal Logger 以及如何禁用此功能

在 dotnet 9 的 SDK 版本里面,将 Terminal Logger 功能设置为默认。这是一个令我烦恼的功能。我将在这篇博客里面和大家介绍这是一个什么功能,以及如何将此功能禁用在 dotnet 9 默认开启的 Terminal Logger 功能,是在 dotnet 8 作为实验性引入的功能。核心原因是因为有开发者…

读DAMA数据管理知识体系指南16数据存储和操作活动

读DAMA数据管理知识体系指南16数据存储和操作活动1. 活动 1.1. 数据存储和操作包括数据库技术支持和数据库操作支持两个主要活动 1.2. 数据库技术支持侧重选择和维护用于存储和管理数据的软件 1.3. 数据库操作支持侧重软件所管理的数据和进程 2. 管理数据库技术 2.1. 技术管理的…

退役划水十 贝肯茨威格

发暗网上没过审,管理员说要来鲨我,只能发博客园了贝肯是贝肯,茨威格是茨威格,但这里是划水,不是史论,更不是冻鳗理论。 很多人都认为茨威格在《断头王后:玛丽安托瓦内特传》中有一段很文艺,很精辟的评价:“她那时候还太年轻,不知道所有命运赠送的礼物,早已在暗中标好…

How to use Linux shell echo date to a log file All In One

How to use Linux shell echo date to a log file All In One 如何使用 Linux shell 将日期打印输出到日志文件How to use Linux shell echo date to a log file All In One如何使用 Linux shell 将日期打印输出到日志文件solutions # 命令 ✅ $ date >> /etc/rc.local.m…