集训做题杂记1 - -MornStar

news/2025/10/28 20:41:27/文章来源:https://www.cnblogs.com/mornstar/p/19172691

[CTS2024] 众生之门

小清新构造题。

观察大样例可以发现答案不大于 \(3\),感性猜测可以在路径长度不超过 \(3\) 的情况下遍历整棵树,事实也确实如此。

进一步考虑答案一般为 \(0\)\(1\),只有 \(n\) 比较小或者图为菊花时答案是固定的。

所以我们对较小的 \(n\) 跑暴力,菊花图特判,对其余情况随机一个排列,每次交换两项,直到答案小于等于 \(1\) 输出即可。

由于答案值域是 \(O(n)\) 的,所以期望也是 \(O(n)\) 次找到答案,复杂度没问题。

#include<bits/stdc++.h>
using namespace std;
#define PII pair<int,int>
#define PLI pair<ll,int>
#define PIL pair<int,ll>
#define PLL pair<ll,ll>
#define fi first
#define se second
#define YES() cout<<"YES\n",0
#define NO() cout<<"NO\n",0
#define Yes() cout<<"Yes\n",0
#define No() cout<<"No\n",0
using ll=long long;
using uint=unsigned int;
using ull=unsigned long long;
using lb=long double;
const int N=5e4+5;
int T,n,s,t,dep[N],p[N],ANS,ans[N];
int siz[N],wc[N],top[N],fa[N];
vector<int>e[N];
void dfs1(int now,int f){siz[now]=1,wc[now]=0,fa[now]=f;for(auto it:e[now]){if(it!=f){dep[it]=dep[now]+1;dfs1(it,now);siz[now]+=siz[it];if(siz[it]>siz[wc[now]])	wc[now]=it;}}
}
void dfs2(int now,int Top){top[now]=Top;if(wc[now])	dfs2(wc[now],Top);for(auto it:e[now]){if(it!=fa[now]&&it!=wc[now])	dfs2(it,it);}
}
int LCA(int x,int y){while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]])	swap(x,y);x=fa[top[x]];}return dep[x]<dep[y]?x:y;
}
bool flower(){for(int i=1;i<=n;i++)	if(e[i].size()==n-1)	return 1;return 0;
}
int dis(int x,int y){return dep[x]+dep[y]-2*dep[LCA(x,y)];}
mt19937 rd(std::random_device{}());
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>T;while(T--){cin>>n>>s>>t;for(int i=1;i<=n;i++)	e[i].clear();for(int i=1,u,v;i<n;i++){cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}dep[1]=0;dfs1(1,1),dfs2(1,1);if(n<=8){ANS=10;for(int i=1;i<=n;i++)	p[i]=i;do{if(p[1]!=s||p[n]!=t)	continue;int tmp=0;for(int i=2;i<=n;i++)	tmp^=dis(p[i],p[i-1]);if(tmp<ANS){ANS=tmp;for(int i=1;i<=n;i++)	ans[i]=p[i];}	}while(next_permutation(p+1,p+n+1));for(int i=1;i<=n;i++)	cout<<ans[i]<<" ";cout<<"\n";}else{p[1]=s,p[n]=t;
//			for(int i=2;i<=n-1;i++)	ans[i]=p[i]=i-1+(i-1>=s)+(i-1+(i-1>=s)>=t);for(int i=1;i<=n;i++)if(i!=s&&i!=t)	p[i-(i>s)-(i>t)+1]=i;if(flower()){for(int i=1;i<=n;i++)	cout<<p[i]<<" ";cout<<"\n";continue;}int tmp=0;for(int i=2;i<=n;i++)	tmp^=dis(p[i],p[i-1]);while(tmp>1){int l=rd()%(n-2)+2,r=rd()%(n-2)+2;while(l==r)	r=rd()%(n-2)+2;tmp^=dis(p[l],p[l-1])^dis(p[l],p[l+1])^dis(p[r],p[r-1])^dis(p[r],p[r+1]);swap(p[l],p[r]);tmp^=dis(p[l],p[l-1])^dis(p[l],p[l+1])^dis(p[r],p[r-1])^dis(p[r],p[r+1]);}for(int i=1;i<=n;i++)	cout<<p[i]<<" ";cout<<"\n";}}
}

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

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

相关文章

CF1909I Short Permutation Problem

CF1909I Short Permutation Problem并非独立切,大量参考题解。 对于排列计数问题,考虑三个方向:容斥、连续段DP、按顺序加数。 发现容斥和连续段DP没前途,考虑按顺序加数。从 \(1\) ~ \(n\) 加数显然是不行的,因为…

ROS1 go2 vlp16 局部避障--3 篇 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

25.10.28随笔NOIP模拟赛总结

考试 开考看题,秒了 T1,感觉 T2 是简单 dp,T3 有点神秘不知道,T4 一眼有一个 \(\mathcal O(n^2)\)。于是顺序开题。T1 很快写了,T2 看了一个小时还是不会有点难崩,当时是很快想到一个 dp,设 \(f_{i,j,0/1}\) 表…

第二十八篇

今天是10月28号,上了铁道技术认知。

P8269 [USACO22OPEN] Visits S

P8269 [USACO22OPEN] Visits S 题解题目传送门 博客传送门 首先,每头牛牛都只有一个拜访对象,所以如果考虑图论建模的话,相当于每个点出度都是 1。这相当于图是个基环树森林(注意不只有一棵基环树),而且每个基环…

Luogu P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 题解 [ 蓝 ] [ 线性 DP ] [ 种类数观察 ]

联合猫国 去年模拟赛做过一道几乎一模一样的题,于是一眼秒了。 本题的一个结论:最终可合并的区间数为 \(\bm{O(n\log n)}\) 级别。 证明可以考虑构造出可合并区间数最多的序列,显然是所有数都相同时的区间数,可以取…

深入解析:【STM32项目开源】基于STM32的独居老人监护系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CSP-S 41多校 9

10.28 (虽然但是下发文件NOIP?)10.28 CSP-S 前倒数第二场模拟赛,直接一道都没切出来。。。 再不放信心赛真要没信心了。 t1 dp题。 显然对于每一次行动都是一个背包dp。 变种在于背包更换,更换后容量重新计算。 所…

【25.10.28】模拟赛

T1 code #include<bits/stdc++.h> using namespace std; const int N=5e4+5,M=1e3+5; int n,m,ans=0; char s[N],t[M]; int nxt[M]; int f[N][M]; int g[M][30]; void getnxt(){nxt[1]=0;int j=0;for(int i=2;i&…

CSP-S模拟41

CSP-S模拟41 A. 数轴取物(axis) 显然可以有一个 \(O(n^3)\) 的背包 dp,设 \(dp[i][j][k]\) 表示选区间 \([i,j]\),背包容量为 \(k\) 时可获得的最大价值。每次枚举固定左端点从小到大枚举右端点,发现 \(dp[i][j]\) …

Linux双中文编码笔记

Linux双中文编码笔记/etc/locale.gen zh_CN.GB18030 GB18030zh_CN.GBK GBK 上面两行默认是被注释掉的,要打开。 /usr/sbin/dpkg-reconfigure/usr/sbin不在普通用户的PATH里,再说运行它也需要root权限。 如果dkpg-rec…

C++类和对象(1) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人工智能之编程基础 Python 入门:第二章 Python 的编辑器 VS Code

人工智能之编程基础 Python 入门:第二章 Python 的编辑器 VS Code人工智能之编程基础 Python 入门 第二章 Python 的编辑器 VS Code@目录人工智能之编程基础 Python 入门前言一、VS Code安装二、配置PythonVS Code 汉…

2019 福建省队集训录

退役前最后的贡献\(\scr{Day}\ 1\) T1 (sort)Source:$\bf{solution}$$\bf{code}$T2 (sort)Source:$\bf{solution}$$\bf{code}$T3 (sort)Source:$\bf{solution}$$\bf{code}$

AIX multibos bootlist

Check bash bootlist -m normal -o hdisk0 blv=hd5 pathid=0 lspv hdisk0 00cc4bc0964f315a rootvg active hdisk1 00cc4bc028d6260c altinst_root…

记录一次nginx能通但是请求一直不了的问题

今天在公司碰到这样一个问题:开发后在测试环境进行部署,部署后有个调用其他部门的接口,需要通过nginx来代理请求转发到另一个部门。运维把nginx配置完成后,本地和开发测试都正常,但是通过测试环境访问一直是不同的…

【嵌入式】PWM DAC的滤波器设计

PWM DAC PWM概念本身很简单,具体可以参考各网上资料。PWM:脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是用脉冲来输出模拟信号的一种技术,一般变换后脉冲的周期固定,但脉冲的工作周…

被称作遗憾之物 爬满了脊骨 又把控了痛楚 被称作无用之物 修筑了唯一的通路

test30 前两题都 0pts,nbm(? 2-A 飞船制造 (spaceship.cpp) 怎么有傻子没开 c++11 写了 rank 然后 re 惹 /fad 考虑依次枚举 \(s=i+j+k\),计算出 \(s\) 一定的方案数就能确定唯一的 \(s\),方案数计算好像只能考虑…

neovim在windwos11下snack.nvim的问题

问题复现 首先确定有 find 命令,在执行之后,会出现下面的问题: Command failed: - cmd: `find . -type f -not -path */.git/* -not -path */.*`几乎百分百。 查找原因 查阅之后得知,问题为调用了linux风格的find命…

完整教程:Java 集合 “List + Set”面试清单(含超通俗生活案例与深度理解)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …