爱与时间反应鲜红色慢慢退却 一次次重复直到忘记了誓言

news/2025/11/21 19:46:53/文章来源:https://www.cnblogs.com/chelsyqwq/p/19254298

test45

今天怎么第一版 t1/t2 都是假的(


构造字符串

数据范围不是特别大直接改条件 \(a_i=a_j/a_i\neq a_j\),你并查集前一种之后看一下符不符合第二种,如果符合的话肯定有解,比方说你考虑每个连通块给不同颜色。

注意到你目前给一个子集上合法颜色不会对未来造成影响,最小化字典序就是你想咋样就咋样咯,所以按照连通块中最小的标号这个顺序做简单贪心。

#pragma GCC optimize(1,2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fir first
#define sec secondusing namespace std;const int N=1005;int n, m, dsu[N], ans[N];
bool chk[N][N];
vector<int> to[N];int get(int x) { return x==dsu[x]?x:dsu[x]=get(dsu[x]); }
void merge(int x,int y) { x=get(x), y=get(y), dsu[x]=y; }signed main() {freopen("str.in","r",stdin);freopen("str.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;up(i,1,n) dsu[i]=i;while(m--) {int i, j, z;cin >> i >> j >> z;up(u,0,z-1) merge(i+u,j+u);if(i+z<=n&&j+z<=n) {to[i+z].pb(j+z);to[j+z].pb(i+z);}}up(i,1,n) for(int j:to[i]) if(get(i)==get(j)) { cout << -1 << '\n'; return 0; }up(i,1,n) if(!ans[i]) {int u=get(i), in=0;up(j,1,n) if(!chk[u][j]) { in=j; break; }up(j,1,n) if(get(j)==u) {ans[j]=in;for(int k:to[j]) chk[get(k)][in]=1;}}up(i,1,n) cout << ans[i]-1 << ' ';return 0;
}

寻宝

咋又是这种题目,好无趣。原图上联通的缩成点,然后用有向图的强连通再缩一次点。之后要做的是 DAG 图连通性,这个问题最多只能 bitset 处理,但是这个题目 \(k\)\(100\) 诶那随便搞了。

#pragma GCC optimize(1,2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pii pair<int,int>
#define mp make_pair
#define fir first
#define sec second 
#define pb push_backusing namespace std;const int N=50005, M=21, K=305;
const int dx[4]={1,-1,0,0}, dy[4]={0,0,1,-1};int n, m, tot, k, T, gp[N], vis[N], stk[N], in[N], top, cnt;
vector<int> id[N], F[N], G[N], to[N];
vector<char> str[N];
bitset<N> a[N/2];void dfs1(int x) {for(int y:F[x]) if(!vis[y]) vis[y]=1, dfs1(y);stk[++top]=x;
}void dfs2(int x) {for(int y:G[x]) if(!gp[y]) gp[y]=cnt, dfs2(y); 
}signed main() {freopen("treasure.in","r",stdin);freopen("treasure.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m >> k >> T;up(i,0,n+1) id[i].resize(m+2), str[i].resize(m+2);up(i,1,n) cin >> &str[i][1];up(i,1,n) up(j,1,m) if(str[i][j]=='.'&&!id[i][j]) {queue<pii> q; id[i][j]=++tot, q.push(mp(i,j));while(q.size()) {int x=q.front().fir, y=q.front().sec;q.pop();up(o,0,3) {int xx=x+dx[o], yy=y+dy[o];if(str[xx][yy]=='.'&&!id[xx][yy]) {id[xx][yy]=tot;q.push(mp(xx,yy));}}}}while(k--) {int x, y, l, r;cin >> x >> y, l=id[x][y];cin >> x >> y, r=id[x][y];if(l!=r) F[l].pb(r), G[r].pb(l);}up(i,1,tot) if(!vis[i]) vis[i]=1, dfs1(i);dn(u,tot,1) {int i=stk[u];if(!gp[i]) gp[i]=++cnt, dfs2(i);} up(i,1,tot) for(int j:F[i]) {if(gp[i]==gp[j]) continue;to[gp[j]].pb(gp[i]), ++in[gp[i]]; }queue<int> q;up(i,1,cnt) if(!in[i]) q.push(i);while(q.size()) {int x=q.front(); q.pop();a[x][x]=1;for(int y:to[x]) {a[y]|=a[x];if(!--in[y]) q.push(y);}}while(T--) {int x, y, l, r;cin >> x >> y, l=id[x][y], l=gp[l];cin >> x >> y, r=id[x][y], r=gp[r];cout << a[l][r] << '\n';}return 0;
}

序列

转成前缀和,变成了找前后缀在 \(x=k\) 的 rmq,离线扫 \(p\uparrow\) 就是加线段查询李超线段树随便写写得了。

#pragma GCC optimize(1,2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define ll __int128
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fir first
#define sec second
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)using namespace std;const int N=1000005, inf=1e18;int n, T, sp[N], m, a[N], b[N], tag[N<<2], ans[N];
pii tr[N<<2];
struct QUR { int p, k, id; } q[N];int calc(pii x,int u) { return max((ll)x.fir*u+x.sec,(ll)-inf); }
bool check(pii l,pii r,int u) { return calc(l,u)>=calc(r,u); }void build(int p=1,int s=1,int e=m) {tr[p]=mp(0,0), tag[p]=1;if(s==e) return;int mid=(s+e)>>1;build(ls(p),s,mid), build(rs(p),mid+1,e);
}void modify(pii u,int p=1,int s=1,int e=m) {int mid=(s+e)>>1;if(tag[p]) return tr[p]=u, tag[p]=0, void();if(check(u,tr[p],sp[mid])) swap(u,tr[p]);if(check(tr[p],u,sp[s])&&check(tr[p],u,sp[e])) return;if(check(u,tr[p],sp[s])) modify(u,ls(p),s,mid);if(check(u,tr[p],sp[e])) modify(u,rs(p),mid+1,e);
}int query(int v,int p=1,int s=1,int e=m) {int res=tag[p]?-inf:calc(tr[p],v);if(s==e) return res;int mid=(s+e)>>1;if(v<=sp[mid]) res=max(res,query(v,ls(p),s,mid));if(v>sp[mid]) res=max(res,query(v,rs(p),mid+1,e));return res;
}signed main() {freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> T;up(i,1,n) {cin >> a[i] >> b[i];a[i]+=a[i-1], b[i]+=b[i-1];}up(i,1,T) {int p, k;cin >> p >> k;q[i]=(QUR){p,k,i};sp[++m]=k;}sort(sp+1,sp+1+m), m=unique(sp+1,sp+1+m)-sp-1;sort(q+1,q+1+T,[](QUR i,QUR j){return i.p<j.p;});int j=1;build(); modify(mp(0,0));up(i,1,n) {while(j<=T&&q[j].p==i) {ans[q[j].id]+=query(q[j].k);++j;}modify(mp(b[i],-a[i]));}j=T;build();dn(i,n,1) {modify(mp(-b[i],a[i]));while(j>=1&&q[j].p==i) {ans[q[j].id]+=query(q[j].k);--j;}}up(i,1,T) cout << ans[i] << '\n';return 0;
}

构树

考虑断掉 \(k\) 条边重构的方案数是什么,关心连通块大小 \(p_1,\dots,p_{k+1}\),想做这个这个还有一个重构到合法边的问题,设 \(g_i\) 表示拆掉 \(i\) 条边重构的方案数,\(f_i\) 表示有 \(i\) 条边不同的方案数,显然是 \(g_i=\sum_{j=0}^i f_j\binom{n-1-j}{i-j}\),可以二项式反演到 \(f_i=\sum_{j=0}^i(-1)^{j-i}\binom{n-1-j}{i-j}g_j\),之后就彻底只关心 \(\{p\}\) 惹。

早上对着这玩意弄了半个早上,其实有尝试 Prufer 了但是无法成功,谁懂看到是 神秘公式 的救赎感...?\(n\) 个点形成 \(m\) 个连通块用 \(m-1\) 条边将其联通的方案数是 \(n^{m-2}\prod siz_u\)。前面那个显然对于 \(k\) 是常数,现在考虑怎么算对于 \(k\)\(\prod siz_u\),初始想法可以 \(f[u][i][v]\) 表示子树 \(u\)\(i\) 条断边当前连通块有 \(v\) 个点的方案数。考虑怎么扔掉一维,还是比较经典的你可以去组合意义 \(\prod siz_u\),每个连通块选一个点的方案数,你直接上 \(f_{u,0/1}\) 表示子树根所在连通块有没有选点的方案数,好转移,你这里带着钦定去转移就好了,还是好写的。

最后就是空间开不下,按照树形背包优化空间的办法可以降掉一个 \(n\),具体而言 \(u\) 只需要 \(siz_u\) 的空间,只要你能保证祖先链上没有太多同时存在就够了,那很自然的会去想把 dp 数组存在 dfn 的区间上面。

所以这算是经典 trick 拼好题吗?

#pragma GCC optimize(1,2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fir first
#define sec secondusing namespace std;const int N=8005, P=1e9+7;int n, siz[N], f[N][2], g[N][2], dfn[N], stp;
int pw[N], mul[N], inv[N], F[N], G[N];
vector<int> to[N];inline void add(int &a,int b) { a=(a+b)%P; }void dfs(int x,int fad) {dfn[x]=++stp, siz[x]=f[dfn[x]][0]=f[dfn[x]][1]=1;for(int y:to[x]) if(y!=fad) {dfs(y,x);up(i,0,siz[x]+siz[y]-1) g[i][0]=g[i][1]=0; up(l,0,siz[x]-1) up(r,0,siz[y]-1) {add(g[l+r][0],f[dfn[x]+l][0]*f[dfn[y]+r][0]%P);add(g[l+r+1][0],f[dfn[x]+l][0]*f[dfn[y]+r][1]%P);add(g[l+r][1],f[dfn[x]+l][1]*f[dfn[y]+r][0]%P);add(g[l+r+1][1],f[dfn[x]+l][1]*f[dfn[y]+r][1]%P);add(g[l+r][1],f[dfn[x]+l][0]*f[dfn[y]+r][1]%P);}up(i,0,siz[x]+siz[y]-1) f[dfn[x]+i][0]=g[i][0], f[dfn[x]+i][1]=g[i][1];siz[x]+=siz[y];}
}int C(int n,int m) {if(n<m||m<0) return 0;return mul[n]*inv[m]%P*inv[n-m]%P;
}signed main() {freopen("tree.in","r",stdin);freopen("tree.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n, pw[0]=mul[0]=inv[0]=inv[1]=1;up(i,1,n) pw[i]=pw[i-1]*n%P;up(i,1,n) mul[i]=mul[i-1]*i%P;up(i,2,n) inv[i]=inv[P%i]*(P-P/i)%P;up(i,2,n) inv[i]=inv[i-1]*inv[i]%P;up(i,2,n) {int u, v;cin >> u >> v;to[u].pb(v);to[v].pb(u);}dfs(1,0);up(i,0,n-1) G[i]=(i==0)?1:(pw[i-1]*f[1+i][1]%P);dn(i,n-1,0) {up(j,0,i) {int val=G[j]*C(n-1-j,i-j)%P; if((i-j)%2==0) add(F[i],+val);if((i-j)%2==1) add(F[i],-val);	}cout << (F[i]%P+P)%P << ' ';}return 0;
}

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

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

相关文章

Mac 安装 JDK 8u281(JDK-8u281-1.dmg)详细步骤(附安装包)

Mac 安装 JDK 8u281(JDK-8u281-1.dmg)详细步骤(附安装包)​一、准备工作下载文件 安装包下载:https://pan.quark.cn/s/24c8755b74f0 ,下载了 JDK-8u281-1.dmg文件,它一般是个安装包。找到文件 打开你的 “下载”…

chrome: 允许远程调试

一,默认不能从远程访问chrome的调试端口: 例子: $ google-chrome --remote-debugging-port=9222 --user-data-dir=/data/python/xianyu/userdata 通过局域网ip访问:本地可以访问:二,通过端口转发供远程访问 $ soca…

Agent skills 实战

背景: 通过编码方式编写符合规范的ofd文件。 过程:通过调研,锁定使用 ofdrw和easyofd两种 java ofd生成工具上,最终选择easyofd组件(大模型不认识该组件)。那接下来遇到的问题是,大模型不知道怎样使用这两种组件。…

Vue 路由的学习

Vue 路由完全指南 Vue路由完全指南:从基础到实战,轻松掌握页面跳转核心 在Vue开发中,路由是实现单页面应用(SPA)页面切换的核心技术。无论是Vue2还是Vue3,路由都扮演着"导航指挥官"的角色,负责管理不…

P8809 [蓝桥杯 2022 国 C] 近似 GCD 题解

考虑到非常困难。再简单的计数题也要认真看一眼。 P8809 [蓝桥杯 2022 国 C] 近似 GCD 思路 考虑刻画充要条件去计数。发现一个子区间合法的充要条件是至多一个数不是 \(g\) 的倍数。 将不是 \(g\) 倍数的东西看作 1,…

推荐一款超级好用的命令行工具 http-server

推荐一款超级好用的命令行工具 http-server前言很多时候前端开发的项目需要放到线上才能出现一些问题,本地环境看不出来,此时很多小伙伴可能会喜欢用Live Serve来启动本地项目,但是部分框架打包的dist包无法通过Liv…

J 组要考,S 组也要考

在 CSP 竞赛中,J 组与 S 组是两项并行的赛事。在竞赛生涯中,许多人可能会认为只需专注其中一组即可,认为另一组无关紧要。然而,实际上,这两者都至关重要:J 组要考,S 组同样也要考。 正如鲁迅先生所言:“紫题是…

估值 7 亿美元,Wispr 要做语音操作系统,还要自研 ASR;马斯克:实时视频理解和生成是未来丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态…

AI浪潮下的新动向:协作、法律与未来工作

最近刷新闻,发现AI领域又炸开锅了。从OpenAI的群聊功能到商标纠纷,再到马斯克对未来的大胆预测,这些事件不仅让我这个学软件工程的看得津津有味,还引发了不少关于技术发展和就业的思考。先说说OpenAI的新功能“群聊…

day11-Dify智能体-发布-工作流

今日内容 1 对接大模型 # 0 Coze 是一个成熟的商业软件-咱们用户只需要访问地址--》直接使用 --》本身集成了大模型-豆包、deepseek大模型,插件:图像生成---》使用扣token-更适合小白-Coze 用gpt模型?用不了,没有提…

puff-pastry靶机

在探姬老师那里看到的一个内网渗透靶场,作为入门靶场挺好的,也是第一次打这种多层内网的靶场首先先将docker镜像拉起来 docker-compose up -ddocker ps -a用这个命令看看容器都跑起来没有,如果stastus都显示"u…

day27-MCP进阶

四、SSE传输方式的MCP服务器创建流程 以上MCP服务器都是stdio传输方式,而除此之外,目前MCP服务器还支持SSE传输和基于HTTP的流式传输。这两种传输方式也有非常广泛的实际用途,接下来详细介绍如何构建基于SSE和HTTP流…

Day37:2025年10月27日,星期一,上班。

今天照常开周例会,安排了一堆应知应会内容,需要尽快熟悉。一把年纪了,还要记这些,早些年要这么努力,清华北大都考上了。这或许就是所谓的少壮不努力老大徒伤悲。 ​​​

Day36:2025年10月26日,星期天,休息。

星期六出差回来,出差积压了几天的快递了,一次性拆了一堆,买了一件凯乐石的mont-x,非常不错,丝毫不比鸟差多少嘛,他的越野跑鞋fuga系列也非常火,我看户外越野跑的大神们人手一双。

Day42:2025年11月1日,星期六,值班,诸事皆顺。

今天家里厨房又添置一员大将,微蒸烤炸一体机,还可以联网查看食谱制作美食,这个太好了,我的微波炉、烤箱、蒸锅、空气炸锅都可以扔了。瞬间厨房就极简了,必须吹爆,非常满意。

成都合成树脂瓦使用寿命影响因素?成都佳英耀旺告诉你

成都合成树脂瓦使用寿命影响因素?成都佳英耀旺告诉你成都合成树脂瓦使用寿命影响因素?成都佳英耀旺告诉你 许多消费者在选购时都会关心一个核心问题:一顶树脂瓦,究竟能用多久?其使用寿命并非由单一因素决定,而是…

Talent AI ——专家级大模型数据标注平台

Talent AI 是一家由顶级基金投资、由头部大模型团队骨干与上市公司高管联合创立的专家级数据标注平台。 平台专注于利用全球专业人士的知识与深度经验,为新一代人工智能模型提供高质量、高可信度的专家数据,帮助 AI …

Day38:2025年10月28日,星期二,值班,诸事皆顺。

今天有个土贼入室行窃,出入他人家中如入无人之境。却不知有一双无形的眼睛已经在密切关注他了,任由你在那里给自己加再多的戏,也难逃你被发现的悲惨结局。洋洋洒洒弄个千字研判报告,干就完事了,坐等你被抓。

Day40:2025年10月30日,星期四,上班。

成都省的养成哥来德阳莅临指导工作了,好久没有聚了,上次聚的时候,还是我抽调ST的时候。晚上一起吃了个烤肉,只可惜最近风声太紧,只有美食接待,缺少美酒相伴,唯留他独饮,属实遗憾。一起回味了大学的美好时光,吹…

Day39:2025年10月29日,星期三,休息。

昨天晚上休息得还行吧,没有拉撑睡通宵,中途起来两次。好在事情都很简单,也很顺利解决。