-
个人简介
Tool
Music
algorithm template
最小生成树(Minimum Spanning Tree)
Kruskal算法
#include<iostream> #include<algorithm> using namespace std; const int N=1e4+15,M=1e5+15; struct MST{//最小生成树——结构体 int u,v,w; void input(){ cin>>u>>v>>w; } bool operator <(const MST &o)const{//重载用来排序 return w<o.w; } }edge[M]; int n,m,fa[N],ans; int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}//并查集——查询 void Kruskal(int x,int y,int w){//并查集——建边 + 最小生成树边权和 x=find(x);y=find(y); if(x!=y){ fa[y]=x; ans+=w; } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++) edge[i].input(); sort(edge+1,edge+m+1);//最小生成树核心排序 for(int i=1;i<=n;i++) fa[i]=i;//并查集初始化 for(int i=1;i<=m;i++) Kruskal(edge[i].u,edge[i].v,edge[i].w); cout<<ans; }
Prim算法
#include<queue> #include<cstring> #include<iostream> using namespace std; const int N=1e4+15; int n,m,g[N][N],d[N],ans; struct MST{//最小生成树——结构体 int u,d; bool operator <(const MST &o)const{d>o.d;}//重载用在小根堆上 }; bool vis[N];//访问记录 void Prim(int s){//小根堆优化 memset(d,127,sizeof(d)); d[s]=0; priority_queue<MST> q; q.push((MST){s,d[s]}); while(!q.empty()){ int u=q.top().u; q.pop(); if(vis[u]) continue; vis[u]=1; for(int v=1;v<=n;v++){ if(!vis[v]&&g[u][v]<d[v]){ d[v]=g[u][v];//记录集合与当前节点的最短距离 q.push((MST){v,d[v]});//松弛操作 } } } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; g[u][v]=g[v][u]=w;//注意是无向图 } Prim(1); for(int i=1;i<=n;i++) ans+=d[i];//计算最小权值和 cout<<ans; }
?
739559114
最长公共子序列进阶模板(长度+字母输出+滚动数组优化)
#include<iostream> using namespace std; string s1,s2; int len1,len2,f[2005][2005],pre[2005][2005]; void print(int x,int y){ if(!pre[x][y]) return ; if(pre[x][y]==1){ print(x-1,y-1); cout<<s1[x]; }else { if(pre[x][y]==2) print(x,y-1); else print(x-1,y); } } int main(){ cin>>s1>>s2; s1=' '+s1;s2=' '+s2; len1=s1.size(),len2=s2.size(); f[0][0]=0; f[1][0]=0; f[0][1]=0; for(int i=1;i<len1;i++){ for(int j=1;j<len2;j++){ if(s1[i]==s2[j]){ f[i&1][j]=f[(i-1)&1][j-1]+1; pre[i][j]=1; }else { if(f[i&1][j-1]>f[(i-1)&1][j]){ f[i&1][j]=f[i&1][j-1]; pre[i][j]=2; }else { f[i&1][j]=f[(i-1)&1][j]; pre[i][j]=3; } } } } cout<<f[(len1-1)&1][len2-1]<<endl; print(len1-1,len2-1); }本人讨厌思维题!!本人讨厌思维题!!本人讨厌思维题!!本人讨厌思维题!!本人讨厌思维题!!本人讨厌思维题!!- [#
突然想手搓高精度] 高精度加减法(减法还差负数,乘除法没做)
#include<bits/stdc++.h> #define long long int using namespace std; int OneNum[1001],TheOtherNum[1001],AnswerNum[1001]; bool check(){ for(int i=1000;i>=1;i--){ if(OneNum[i]<TheOtherNum[i]) return true; if(OneNum[i]>TheOtherNum[i]) return false; } return false; } void scan1(string num,string mun){ for(int i=0;i<num.size();i++) OneNum[num.size()-i]=num[i]-'0'; for(int i=0;i<mun.size();i++) TheOtherNum[mun.size()-i]=mun[i]-'0'; if(check()||num.size()<mun.size()) for(int i=1;i<=mun.size();i++) swap(OneNum[i],TheOtherNum[i]); } void scan2(string num,string mun){ for(int i=0;i<num.size();i++) OneNum[num.size()-i]=num[i]-'0'; for(int i=0;i<mun.size();i++) TheOtherNum[mun.size()-i]=mun[i]-'0'; } void high_precision_addition(string num,string mun){ scan1(num,mun); for(int i=1;i<=1000;i++){ AnswerNum[i]+=OneNum[i]+TheOtherNum[i]; AnswerNum[i+1]+=AnswerNum[i]/10; AnswerNum[i]%=10; } } void high_precision_subtraction(string num,string mun){ scan1(num,mun); for(int i=1;i<=1000;i++){ AnswerNum[i]+=OneNum[i]-TheOtherNum[i]; if(AnswerNum[i]<0){ AnswerNum[i]+=10; AnswerNum[i+1]--; } } } //void high_precision_multiplication(string num,string mun) //void high_precision_division(string num,string mun) void print(string num,char choise,string mun){ memset(OneNum,0,sizeof(OneNum)); memset(TheOtherNum,0,sizeof(TheOtherNum)); memset(AnswerNum,0,sizeof(AnswerNum)); if(choise=='+') high_precision_addition(num,mun); if(choise=='-') high_precision_subtraction(num,mun); // if(choise=='*') high_precision_multiplication(); // if(choise=='/') high_precision_division(); bool flag=false; for(int i=1000;i>=1;i--){ if(AnswerNum[i]) flag=true; if(!flag) continue; cout<<AnswerNum[i]; } if(!flag) cout<<0; } string a,b; char symbol; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>a>>symbol>>b; print(a,symbol,b); }更新了!!!!
#include<bits/stdc++.h> #define ll long long using namespace std; const int MAX_LEN=2001; int OneNum[MAX_LEN]={0},TheOtherNum[MAX_LEN]={0},AnswerNum[MAX_LEN]={0}; int len1=0,len2=0,max_len; bool if_negative_number=false; void scan(const string& num,const string& mun){ len1=num.size(); len2=mun.size(); max_len=max(len1,len2); for(int i=0;i<len1;i++) OneNum[len1-i]=num[i]-'0'; for(int i=0;i<len2;i++) TheOtherNum[len2-i]=mun[i]-'0'; }bool check(){ if(len1!=len2) return len1>len2; for(int i=1;i<=len1;i++) if(OneNum[i]!=TheOtherNum[i])return OneNum[i]>TheOtherNum[i]; return false; }void high_precision_addition(){ for(int i=1;i<=max_len;i++){ AnswerNum[i]+=OneNum[i]+TheOtherNum[i]; AnswerNum[i+1]+=AnswerNum[i]/10; AnswerNum[i]%=10; } }void high_precision_subtraction(){ if(!check()){swap(OneNum,TheOtherNum);if_negative_number=true;} for(int i=1;i<=max_len;i++){ AnswerNum[i]+=OneNum[i]-TheOtherNum[i]; if(AnswerNum[i]<0){AnswerNum[i]+=10;AnswerNum[i+1]--;} } }void high_precision_multiplication(){ for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++){ AnswerNum[i+j-1]+=OneNum[i]*TheOtherNum[j]; AnswerNum[i+j]+=AnswerNum[i+j-1]/10; AnswerNum[i+j-1]%=10; } }void high_precision_division(){ int res[100]; }void print(const string& num,char choise,const string& mun){ memset(OneNum,0,sizeof(OneNum)); memset(TheOtherNum,0,sizeof(TheOtherNum)); memset(AnswerNum,0,sizeof(AnswerNum)); if_negative_number=false; scan(num,mun); if(choise=='+') high_precision_addition(); if(choise=='-') high_precision_subtraction(); if(choise=='*') high_precision_multiplication(); // if(choise=='/') high_precision_division(); if(if_negative_number) cout<<'-'; bool leading_zero=true; for(int i=MAX_LEN-1;i>=1;i--){ if(AnswerNum[i]) leading_zero=false; if(!leading_zero) cout<<AnswerNum[i]; } if(leading_zero) cout<<0; cout<<endl; } string a,b; char symbol; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); while(true){ cin>>a>>symbol>>b; if(cin.fail())break; if(a=="0"&&b=="0"&&symbol=='0')break; print(a,symbol,b); } }🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴🌱🧑🐴
- [#
-
最近活动
- 2025 CSP-J1初赛模拟测试3 OI
- 2025TYOI暑期集训结营娱乐赛 ACM/ICPC
- 第六届oiclass信息学夏令营Class10-一维数组进阶 作业
- 第六届oiclass信息学夏令营Class9-一维数组的定义和基础应用 作业
- 第六届oiclass信息学夏令营Class8-循环嵌套 作业
- D班--第九周周中习题 作业
- D班-第六周周末练习题 作业
- D班——倍增算法 作业
- D班——动规加强(区间环形DP/多维DP/差值DP) 作业
- D班-第三周周末练习题 作业
- D班——区间DP之区间合并 作业
- D班——区间DP之区间分割 作业
- D班——搜索算法作业题 作业
- 【oiClass公益赛】2025CSP-J模拟赛#17 OI
- 2024预备班复活赛 OI
- 【oiClass公益赛】2025CSP-J模拟赛#16 OI
- 【oiClass公益赛】2025CSP-J模拟赛#15 OI
- 【oiClass公益赛】2025CSP-J模拟赛#14 OI
- 【oiClass公益赛】2025CSP-J模拟赛#13 OI
- 【oiClass公益赛】2025CSP-J模拟赛#12 OI
- 【oiClass公益赛】2025CSP-J模拟赛#11 OI
- 【oiClass公益赛】2025CSP-J模拟赛#10 OI
- 【oiClass公益赛】2025CSP-J模拟赛#09 OI
- 【oiClass公益赛】2025CSP-J模拟赛#08 OI
- 【oiClass公益赛】2025CSP-J模拟赛#07 OI
- 【oiClass公益赛】2025CSP-J模拟赛#06 OI
- 【oiClass公益赛】2025CSP-J模拟赛#05 OI
- 【oiClass公益赛】2025CSP-J模拟赛#04 OI
- 【oiClass公益赛】2025CSP-J模拟赛#03 OI
- 【oiClass公益赛】2025CSP-J模拟赛#02 OI
- 【oiClass公益赛】2025CSP-J模拟赛#01 OI
- 结营测试改题 IOI
- D班——背包动态规划2 作业
- D班——背包动态规划1 作业
- D班——二维动规之最长公共子序列 作业
- D班——二维线性动态规划规 作业
- D班——线性动规之子序列问题 作业
- D班——线性动态规划基础 作业
- D班——二分搜索 作业
- D班——二分算法 作业
- D班——队列 作业
- D班——广度优先搜索 作业
- 2024小六冬令营《队列》 作业
- 2024预备——期末测试改题 IOI
- 2024预备--深度优先搜索算法2 作业
- 2024预备--深度优先搜索算法 作业
- 2024预备--递归算法加强 作业
- 2024预备--递归算法入门 作业
- 第三届TYCPC重现赛 ACM/ICPC
- 2024预备班--阶段测试5 OI
- 2024预备--第13周周中练习 作业
- 2024预备班11月阶段测试(订正) IOI
- 2024预备--栈 作业
- 2024预备--差分前缀和 作业
- 2024预备--贪心算法 作业
- 2024预备--枚举算法 作业
- 2024预备--模拟算法 作业
- 2024预备--第八周加练题单 作业
- 2024预备--指针&结构体&排序 作业
- 2024预备班10月阶段测试 OI
- 2024预备--位运算 作业
- 2024预备--进制转换 作业
- 2024预备--函数 作业
- 2024预备--第四周周中习题 作业
- D班——差值DP/双指针 作业
- 2024预备--字符、字符串加强练习 作业
- 2024预备--习题订正 作业
- 2024预备--二维数组基础 作业
- 2024oiClass入门组周赛计划#18 IOI
- 2024oiClass入门组周赛计划#17 IOI
- 2024oiClass入门组周赛计划#16 IOI
- 2024oiClass入门组周赛计划#15 IOI
- 2024oiClass入门组周赛计划#14 IOI
- 2024oiClass入门组周赛计划#13 IOI
- 2024oiClass入门组周赛计划#12 IOI
- 2024oiClass入门组周赛计划#11 IOI
- 2024oiClass入门组周赛计划#10 IOI
- 2024oiClass入门组周赛计划#09 IOI
- 2024oiClass入门组周赛计划#08 IOI
- 2024新苗-递推算法基础 作业
- 2024新苗--排序算法基础 作业
- 2024新苗--字符、字符数组、字符串 作业
- 2024新苗--数组标记的应用 作业
- 2024新苗--一维数组基础 作业
- 2024新苗--多重循环 作业
- 2024新苗--while2 作业
- 2024新苗--循环语句(while语句1) 作业
- 2024新苗--数据的在线处理 作业
- 2024新苗班阶段测试一(下午班) OI
- 2024新苗--枚举和筛选 作业
- 2024新苗--循环语句(for语句1) 作业
- 2024新苗--选择结构 作业
- 2024新苗--表达式 作业
- 2024新苗--C++程序结构 作业
- 2024春季线上班class14、动态规划的优化应用 作业
- 2024春季线上班class13、差值动态规划的应用 作业
- 2024春季线上班class12、多维动态规划的应用 作业
- 2024春季线上班class15-期末测试 OI
- 2024春季线上班class11、动态规划的综合应用 作业
- 2024春季线上班class10、倍增-ST算法 课后作业 作业
- 2024春季线上班class10、倍增-ST算法 随堂练习 作业
- 2024春季线上班class9、区间型动态规划2-区间合并 课后作业 作业
- 2024春季线上班class9、区间型动态规划2-区间合并 随堂练习 作业
- 2024春季线上班class8、区间型动态规划1-区间分割 课后作业 作业
- 2024春季线上班class8、区间型动态规划1-区间分割 随堂练习 作业
- 2024春季线上班class7、背包型动态规划2课后作业 作业
- 2024春季线上班class7、背包型动态规划2随堂练习 作业
- 2024春季线上班class6、背包型动态规划1课后作业 作业
- 2024春季线上班class6、背包型动态规划1随堂练习 作业
- 2024春季线上班class4、最长公共子序列课后作业 作业
- 2024春季线上班class4、最长公共子序列随堂练习 作业
- 2024春季线上班class3、二维动规课后作业 作业
- 2024春季线上班class3、二维动规随堂练习 作业
- 2024春季线上班class2、最长不下降子序列课后作业 作业
- 2024春季线上班class2、最长不下降子序列随堂练习 作业
- 2024春季线上班class1、一维动规课后练习 作业
- 2024春季线上班class1、一维动规随堂练习 作业
- 【oiClass公益赛】2024CSP-J模拟赛#09 OI
- 2024寒假算法加强班10构造专题 作业
- 2024寒假算法加强班09课数学入门 作业
- 2024寒假算法加强班08课双指针 作业
- 2024寒假算法加强班07课二分 作业
- 2024寒假算法加强班06课广度优先搜索 作业
- 2024寒假算法加强班05课深度优先搜索 作业
- 2024寒假算法加强班03课枚举 作业
- 2024寒假算法加强班02课贪心算法 作业
- 2024寒假算法加强班01课字符串模拟题 作业
- 2023年第四届oiClass夏令营线上选拔赛 OI
-
Stat
-
Rating