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

【OI 复健计划】板子复习

已经菜到板子都敲不熟练了 >_<。

敲板子前发现自己已经忘记快输怎么写了,没救了(笑哭)。

bfs板子

来自信奥一本通

(唉,还是喜欢手写队列...该改改了)

传送门

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int t,n,ax,ay,m,bx,by,head,tail;
char a[2025][2025];
int map1[201][201];
int dx[5]={0,1,-1,0,0};
int dy[5]={0,0,0,1,-1};
int d[999999][3];
void bfs(int x,int y ) {head=0,tail=1;d[1][1]=x;d[1][2]=y;   d[1][3]=0;            while (head<tail) {  head++;  for (int i=1;i<=4;i++) {  int xx=d[head][1]+dx[i],yy=d[head][2]+dy[i];                 	  		                    if (xx>=1&&xx<=n&&yy>=1&&yy<=m&&map1[xx][yy]==0) {         map1[xx][yy]=d[head][3]+1;    tail++;         d[tail][1]=xx;d[tail][2]=yy;d[tail][3]=map1[xx][yy];            }if (xx==bx&&yy==by) {cout<<map1[xx][yy]<<endl;return ;}                     }    }    cout<<"oop!"<<endl;                 	                                         
}                  
int main() {cin>>t;for (int k=1;k<=t;k++) {cin>>n>>m;memset(map1,0,sizeof(map1) ) ;   for (int i=1;i<=n;i++) {for (int j=1;j<=m;j++) {cin>>a[i][j];            if (a[i][j]=='S')  { ax=i,ay=j;      }                       if (a[i][j]=='E') {bx=i;by=j;     }                 if (a[i][j]=='#')  map1[i][j]=1; 	                  	}                 }                    bfs(ax,ay);           }return 0;
}

单源最短路

来自洛谷

迪杰斯特拉都忘干净了,废了废了。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+2025;
int n,m,head[N],cnt,dis[N];
bool vis[N];
struct node{int next,to,w;
}e[N<<2];
void add(int u,int v,int w) {e[++cnt].next=head[u];e[cnt].to=v;e[cnt].w=w;head[u]=cnt;
}
void dj(int x) {priority_queue<int,vector<pair<int,int> >,greater<pair<int,int> > >q;memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));q.push(make_pair(0,x)); dis[x]=0;while(!q.empty()) {int now=q.top().second; q.pop();if (vis[now]) continue;vis[now]=1;for (int i=head[now];i;i=e[i].next) {if (dis[e[i].to]>dis[now]+e[i].w) {dis[e[i].to]=dis[now]+e[i].w;q.push(make_pair(dis[e[i].to],e[i].to));}}}
}
signed main() {int s;cin>>n>>m>>s;for (int i=1;i<=m;++i) {int x,y,z;cin>>x>>y>>z; add(x,y,z);}dj(s);for (int i=1;i<=n;++i) {cout<<dis[i]<<" ";}
}

加强版全源最短路

来自洛谷

要 spfa 处理重边自环,原来这题这么难吗

已经彻底退化了 >_<。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){int x=0,f=0;char ch=getchar();for(;!isdigit(ch);ch=getchar()) f|=(ch=='-');for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);return f?-x:x;
}
void print(int x) {if (x<0) putchar('-'),x=-x;if (x>9) print(x/10);putchar(x%10+48);
}
const int INF=1e9;
const int N=1e4+2025;
int n,m,cnt,head[N<<2],h[N],dis[N],t[N];
bool vis[N];
struct node{int next,to,w;
}e[N<<2];
void add(int u,int v,int w) {e[++cnt].next=head[u];e[cnt].to=v;e[cnt].w=w;head[u]=cnt;
}
bool spfa(int s){queue<int>q;memset(h,63,sizeof(h));h[s]=0;vis[s]=1; q.push(s);while(!q.empty()) {int now=q.front(); q.pop();vis[now]=0;for (int i=head[now];i;i=e[i].next) {if (h[e[i].to]>h[now]+e[i].w) {h[e[i].to]=h[now]+e[i].w;if (!vis[e[i].to]) {vis[e[i].to]=1;q.push(e[i].to);++t[e[i].to];if (t[e[i].to]==n+1) return 0;}}}}return 1;
}
void dj(int s) {priority_queue<int,vector<pair<int,int> >,greater<pair<int,int> > >q;for (int i=1;i<=n;++i) dis[i]=INF;memset(vis,0,sizeof(vis));q.push(make_pair(0,s)); dis[s]=0;while(!q.empty()) {int now=q.top().second; q.pop();if (vis[now]) continue;vis[now]=1;for (int i=head[now];i;i=e[i].next){if (dis[now]+e[i].w<dis[e[i].to]) {dis[e[i].to]=dis[now]+e[i].w;q.push(make_pair(dis[e[i].to],e[i].to));}}}
}
signed main(){n=read(); m=read();for (int i=1;i<=n;++i) {add(0,i,0);}for (int i=1;i<=m;++i) {int x=read(),y=read(),z=read();add(x,y,z);}if (!spfa(0)) {cout<<-1;return 0;}for (int now=1;now<=n;++now) {for (int i=head[now];i;i=e[i].next) {e[i].w+=h[now]-h[e[i].to];}}for (int i=1;i<=n;++i) {dj(i);int ans=0;for (int j=1;j<=n;++j) {if (dis[j]==INF) ans+=j*INF;else ans+=j*(dis[j]+h[j]-h[i]);}cout<<ans<<"\n";}return 0; 
}

线段树

来自洛谷

终于有个还记得的了。

定义数组的时候习惯性的敲下 2023 ,真怀念啊。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {int x=0,f=0;char ch=getchar();for (;!isdigit(ch);ch=getchar()) f|=(ch=='-');for (;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);return f?-x:x; 
}
void print(int x) {if (x<0) putchar('-'),x=-x;if (x>9) print(x/10);putchar(x%10+48); 
}
const int N=1e6+2025;
int n,m,a[N];
namespace ss{#define lson pos<<1#define rson pos<<1|1struct node{int sum,len,lazy;}tree[N<<2];void push_up(int pos) {tree[pos].sum=tree[lson].sum+tree[rson].sum;}void build(int pos,int l,int r) {tree[pos].len=r-l+1;if (l==r) {tree[pos].sum=a[l];return ;}int mid=l+r>>1;build(lson,l,mid); build(rson,mid+1,r);push_up(pos);}void push_down(int pos) {if (!tree[pos].lazy) return ;tree[lson].sum+=tree[pos].lazy*tree[lson].len;tree[rson].sum+=tree[pos].lazy*tree[rson].len;tree[lson].lazy+=tree[pos].lazy;tree[rson].lazy+=tree[pos].lazy;tree[pos].lazy=0; return ;}void change(int pos,int l,int r,int L,int R,int k) {if (l>=L && r<=R) {tree[pos].sum+=k*tree[pos].len;tree[pos].lazy+=k;return ;}int mid=l+r>>1; push_down(pos);if (L<=mid) change(lson,l,mid,L,R,k);if (R>mid) change(rson,mid+1,r,L,R,k);push_up(pos);return ;}int query(int pos,int l,int r,int L,int R) {if (l>=L && r<=R) return tree[pos].sum;int mid=l+r>>1,res=0; push_down (pos);if (L<=mid) res+=query(lson,l,mid,L,R);if (R>mid)	res+=query(rson,mid+1,r,L,R);return res;}
}
signed main(){n=read(); m=read();for (int i=1;i<=n;++i){a[i]=read();}ss::build(1,1,n);while(m--){int op=read(),x,y,z;if (op==1){x=read(); y=read(); z=read();	ss::change(1,1,n,x,y,z);}else {x=read(),y=read();cout<<ss::query(1,1,n,x,y)<<"\n";}}return 0;
} 
http://www.jsqmd.com/news/48554/

相关文章:

  • 时间即生命 梁实秋
  • AI元人文:当理论成为悬鉴 ——兼论独立思想者的现代困境
  • 2025年西北地区无动力无阀滤池水处理设备厂商怎么选?陕西甘肃新疆宁夏四省,优质品牌行业口碑选择指南
  • 2025西北地区反渗透一体机品牌怎么选?陕西、甘肃、新疆、宁夏四省多场景净水提纯设备源头工厂选择指南
  • Microsoft将.NET Aspire 改成了Aspire
  • 2025年西北地区净水、纯水、软化水设备厂家最新推荐!一体化净水处理设备、反渗透一体机、无动力无阀,陕西甘肃新疆宁夏四省,优质品牌选择指南
  • 2025/11/24
  • 医疗环境中的防火墙部署策略解析
  • 自注意机制
  • 百练 / 2025计算机学院推免上机考试(tm2025cs) 题单完整分析
  • 2025 最新一体化净水处理设备厂家 TOP5 权威推荐:工业民用净化优选
  • 计算机网络:知识点梳理及讲解(三)数据链路层 - 教程
  • 50043_基于微信小程序的小区物业管理系统
  • 2025/11/23
  • Widnwos+Codex+国内大模型 - unknown
  • # 二分图最大匹配
  • 几种常见的激光打标机及适配材质推荐选型 - 详解
  • 33号远征
  • 解码TCP
  • 死亡笔记 (Wordpress cms渗透)
  • iso 安装linux
  • isnotnull在oracle中的语法和使用技巧
  • 2025最新东莞AI搜索优化、GEO优化服务商TOP5评测:引领企业AI搜索增长新范式
  • 2025东莞最新数字人克隆厂商TOP5评测,客服数字人克隆 老板IP数字人克隆定制,全场景落地服务商行业口碑榜,专业选择指南。
  • P14225 [ICPC 2024 Kunming I] 左移 2 个人题解
  • 【URP】Unity[相机]渲染顺序
  • PySpark - OneHotEncoder
  • .NET 10 中 C# 14 和 F# 10 的新情况
  • P10687 True Liars 个人题解
  • Kali资料