当前位置: 首页 > news >正文

NOIP2025模拟1

T1:公司的供应链(dag)

思路:

大概就是推出性质但是没写出来。

我们不难发现,对于一个环来说,把环内全部的边删掉是合法的。

然后我们就从一个点开始搜,如果没有环,就把经过的边都标记一下,这是要保留的。然后再记录一下走过的边数,保证每个环只经过一次。

代码:

$code$
#include<iostream>
#include<vector>
using namespace std;
const int N=600000+5;
int n,m,cnt[N],f[N],x[N],y[N],ans;
bool vis[N];
vector<pair<int,int>> v[N];
inline int dfs(int x){if(vis[x]) return x;//有环 vis[x]=1;while(cnt[x]<(int)v[x].size()){int flag=dfs(v[x][cnt[x]].second);if(!flag) f[v[x][cnt[x]].first]=-1;//标记保留的边 cnt[x]++;//走过的边数 if(flag!=x&&flag){//后面有个小环 vis[x]=0;return flag;}}vis[x]=0;return 0;//无环 
}
int main(){
//	freopen("dag.in","r",stdin);
//	freopen("dag.out","w",stdout);ios::sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=m;i++){cin>>x[i]>>y[i];v[x[i]].push_back(make_pair(i,y[i]));//建边 }for(int i=1;i<=n;i++) if(cnt[i]<(int)v[i].size()) dfs(i);//还有边没走 for(int i=1;i<=m;i++) if(f[i]==-1) ans++;cout<<ans<<'\n';for(int i=1;i<=m;i++) if(f[i]==-1) cout<<x[i]<<" "<<y[i]<<'\n';return 0;
}

T2:宇宙的卷积(juanji)

思路:

大概就是赛时两眼一闭数组就开 \(20\) 然后挂了 \(60 ~ pts\) 吧。

有没有大佬给我讲讲 \(T2\) 啊!!真的不会啊!!

T3:舰队的远征(far)

思路:

看眼式子有点像李超,但是马上自我否定了。最后选择跑了 \(n^2\)\(dij\)

其实就是把路径分为三部分:

\[s→x=>y→t \]

\(x,y\) 之间的边是我们新建的特殊边。

怎么求答案呢?

正着跑一边最短路求出到 \(s\) 的最短路,反着求一遍最短路到 \(t\) 的最短路,然后维护一下 \((x-y)^2\)

然后答案是什么呢?

\[dis1_x+dis2_y+(x-y)^2 \]

整理一下,可得

\[dis1_x+x^2+dis2_y+y^2-2*x*y \]

我们枚举每一个 \(x\) ,因此 \(dis1_x+x^2\) 为定制,所以我们只需要维护 \(dis2_y+y^2-2*x*y\) 就好了。

用什么维护呢?用我否定了的李超线段树。【对不起】

然后呢?

然后就没了。

感谢 Wx_y大侠 的博客(就是能不能换个题目🥺)

代码:

$code$
#include<iostream>
#include<queue>
#define int long long
using namespace std;
const int N=2e6+5,inf=1e18;
int n,m,s,t,x,y,z,dis1[N],dis2[N],ans=1e18,cnt1,cnt2,head1[N],head2[N],tr[N<<1];
bool vis1[N],vis2[N];
struct flower{int to,nxt,val;
}a[N],b[N];
struct css{int k,b;
}line[N];
inline void add1(int x,int y,int z){a[++cnt1].to=y;a[cnt1].val=z;a[cnt1].nxt=head1[x];head1[x]=cnt1;
}
inline void add2(int x,int y,int z){b[++cnt2].to=y;b[cnt2].val=z;b[cnt2].nxt=head2[x];head2[x]=cnt2;
}
inline void dij1(int s){priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;	for(int i=1;i<=n;i++) dis1[i]=1e18,vis1[i]=0;dis1[s]=0;q.push({0,s});while(!q.empty()){int x=q.top().second;q.pop();if(vis1[x]) continue;vis1[x]=1;for(int i=head1[x];i;i=a[i].nxt){int y=a[i].to;if(dis1[y]>dis1[x]+a[i].val){dis1[y]=dis1[x]+a[i].val;if(!vis1[y]) q.push(make_pair(dis1[y],y));}}}
}
inline void dij2(int s){priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;for(int i=1;i<=n;i++) dis2[i]=1e18,vis2[i]=0;dis2[s]=0;q.push({0,s});while(!q.empty()){int x=q.top().second;q.pop();if(vis2[x]) continue;vis2[x]=1;for(int i=head2[x];i;i=b[i].nxt){int y=b[i].to;if(dis2[y]>dis2[x]+b[i].val){dis2[y]=dis2[x]+b[i].val;if(!vis2[y]) q.push(make_pair(dis2[y],y));}}}
}
inline int calc(int id,int x){return line[id].k*x+line[id].b;
} 
inline void insert(int rt,int l,int r,int id){if(!tr[rt]){tr[rt]=id;return ;}if(l==r){if(calc(tr[rt],l)>calc(id,l)) tr[rt]=id;return ;}int mid=(l+r)>>1;if(calc(id,mid)<calc(tr[rt],mid)) swap(id,tr[rt]);if(calc(id,l)<calc(tr[rt],l)) insert(rt<<1,l,mid,id);if(calc(id,r)<calc(tr[rt],r)) insert(rt<<1|1,mid+1,r,id);
}
inline int query(int rt,int l,int r,int x){if(l==r) return calc(tr[rt],x);int ans=calc(tr[rt],x);int mid=(l+r)>>1;if(x<=mid) ans=min(ans,query(rt<<1,l,mid,x));else ans=min(ans,query(rt<<1|1,mid+1,r,x));return ans;
}
signed main(){freopen("far.in","r",stdin);freopen("far.out","w",stdout);ios::sync_with_stdio(false);cin>>n>>m>>s>>t;for(int i=1;i<=m;i++){cin>>x>>y>>z;add1(x,y,z);add2(y,x,z);}dij1(s);dij2(t);line[0]=(css){0,inf};for(int i=1;i<=n;i++) line[i]=(css){-2*i,i*i+dis2[i]};for(int i=1;i<=n;i++) insert(1,1,n,i);for(int i=1;i<=n;i++) ans=min(ans,query(1,1,n,i)+i*i+dis1[i]);cout<<ans<<'\n';return 0;
}

T4:军团的阵列线(team)

显然不会

后言

$songs$

皇家海军过战场

日不落帝国踏汪洋

女王手指向何方

东印度之殇

百年玫瑰战争狂

铁甲舰掀起了殖民浪

黄金浇筑的徽章

是荣耀的过往

灯塔的火焰犹闪亮

合众国航母在启航

自由的军队出边疆

烈火燃他乡

卫星画满苍穹上

五大洲遍布我的军港

手握着北约的缰绳

雄鹰依旧翱翔

圣母院钟声绕梁

凡尔赛宫映朝阳

第三帝国军魂游荡

凝视这群羊

钢铁洪流凛寒冰镶

核潜艇游荡在北冰洋

喀秋莎掠过的寒光

照亮了红场

寒冰埋葬了沙皇

双头鹰军号不再回响

冬宫门前回眸望

苏维埃荣光

尘封过五帝与三皇

历经了夏商和汉唐

百年蛰伏不卑不亢

华夏迎曙光

五千年岁月沧桑

文脉传承至今威万邦

共和国乘风破浪

征途再起航

翻手为云覆手为霜

执天下牛耳喜怒五常

肩扛世界格局

筑山河恒久辉煌

社稷固若金汤

千百年送走多少列强

未曾浴血染沙场

怎配踏八荒

普天下星辰未央

谁妄想撼动我的权杖

五常眼眸尽琳琅

看天下兴亡

http://www.jsqmd.com/news/31512/

相关文章:

  • 文生视频时代,RustFS如何成为AI资产库的最佳底座?
  • HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
  • NOIP2025 游记
  • 用 CodeBuddy CLI + Prompt,从零到可运行:前后端混合管理强大的系统的高效实战
  • P16.土堆说卷积(可选看)
  • 25.11.4联考题解
  • d11.4t4 answer
  • 详细介绍:当AI化身数据炼金术士:初级Python开发者如何将创意炼成黄金代码?—— 老码农的炼金术指南
  • 【学习笔记】kafka权威指南——第3章 kafka生产者—向kafka写入资料
  • P15.神经网路的基本骨架——nn.Module的使用
  • function
  • AGC052做题记录
  • 软工团队第一次作业
  • Windows11-GPT
  • 1. markdown转word 第一步: markdown转html
  • P14.Dataloader的使用
  • docker换源
  • pypinyin很好用
  • 小九源码-springboot078-java物业管理架构
  • VS 2017 项目文件不完整,缺少预期导入
  • 人性的弱点
  • P13.torchvision中的数据集使用
  • 机器学习基础入门(第四篇):无监督学习与聚类途径
  • 图上状压 DP
  • k8s删除Terminating状态的命名空间
  • 【实用脚本】一键安装Oracle19c数据库
  • 程序员必逛的9个开发者社区推荐
  • CleanMyMac X 4.14.2 dmg 安装教程|Mac 清理软件详细安装步骤
  • java-迭代器
  • 优化算法三剑客:SGD、Adam、AdamW的深度对比