dijikistra模板
| #include <bits/stdc++.h> |
| using namespace std; |
| typedef long long LL; |
| #define el "\n"; |
| #define INF 0x3f3f3f3f |
| #define rep(i, a, b) for (int i = (a); i <= (b); i++) |
| const int Max = 1e4 + 3; |
| |
| int n = 2021; |
| |
| int gcd(int a,int b) |
| { |
| return b == 0 ? a : gcd(b, a % b); |
| } |
| |
| int get_minG(int a, int b) |
| { |
| return a*b/gcd(a,b); |
| } |
| |
| int dis[3000]; |
| int vis[3000]; |
| vector<pair<int,int>> g[3000]; |
| queue<int> q; |
| int dijikistra() |
| { |
| memset(dis, 0x3f, sizeof(dis)); |
| |
| rep(i, 1, n) |
| { |
| rep(j, 1, n) |
| { |
| if (abs(i - j) <= 21) |
| { |
| g[i].push_back({ j,(get_minG(i,j)) }); |
| } |
| } |
| } |
| |
| dis[1] = 0; |
| q.push(1); |
| while(!q.empty()) |
| { |
| int v = q.front(); |
| q.pop(); |
| for (auto it : g[v]) |
| { |
| int u = it.first; |
| int cost = it.second; |
| if (dis[u] > dis[v] + cost) |
| { |
| dis[u] = dis[v] + cost; |
| if (!vis[u]) |
| { |
| vis[u] = 1; |
| q.push(u); |
| } |
| } |
| } |
| } |
| |
| return dis[2021]; |
| |
| } |
| int main() |
| { |
| cin.tie(0); |
| cout.tie(0); |
| |
| |
| cout<<dijikistra(); |
| |
| |
| return 0; |
| } |
并查集模板
| #include<bits/stdc++.h> |
| using namespace std; |
| const char el = '\n'; |
| typedef long long ll; |
| #define rep(i,a,b) for (int i = (a);i <= (b);i++) |
| const int N = 2e5 + 10; |
| |
| int c[30200]; |
| int fa[30200]; |
| |
| int find(int x) |
| { |
| return fa[x] = (fa[x]==x) ? x : find(fa[x]); |
| } |
| |
| |
| int main() { |
| cin.tie(0); |
| cout.tie(0); |
| |
| |
| |
| |
| |
| |
| int n , m ; |
| cin >> n >>m; |
| rep(i,1,n) |
| { |
| cin>>c[i]; |
| fa[i] = i; |
| } |
| |
| rep(i,1,m) |
| { |
| int x , first,second; |
| cin >> x; |
| cin >> first; |
| int fa1,fa2; |
| rep(i,2,x) |
| { |
| cin >> second; |
| fa1 = find(first); |
| fa2 = find(second); |
| fa[fa1] = fa2; |
| } |
| } |
| |
| set<int> se; |
| |
| rep(i,1,n) |
| { |
| int f = find(i); |
| if(se.find(f) == se.end()) |
| { |
| se.insert(f); |
| } |
| if(c[f] > c[i]) |
| { |
| c[f] = c[i]; |
| } |
| } |
| |
| int ans = 0; |
| for(auto it : se) |
| { |
| ans+=c[it]; |
| } |
| |
| cout<<ans<<el; |
| return 0; |
| } |
| |
欧几里得
| int gcd(int a,int b) |
| { |
| return b==0?a:gcd(b,a%b); |
| } |
快速幂
| int mypow(int n) |
| { |
| if (n == 0) |
| { |
| return 1; |
| } |
| if (n == 1) |
| { |
| return 2; |
| } |
| int r = 1; |
| if (n % 2 == 1) |
| { |
| n--; |
| r = 2; |
| } |
| return mypow(n / 2) * mypow(n / 2)*r; |
| } |
各种STL库用迭代器遍历
| #include<bits/stdc++.h> |
| using namespace std; |
| |
| int main() { |
| |
| map<int,int> mp; |
| mp[1] = 2; |
| |
| for(map<int,int>::iterator it = mp.begin();it!=mp.end();it++) |
| { |
| cout<<it->first<<el; |
| cout<<it->second<<el; |
| } |
| |
| set<int> se; |
| se.insert(3); |
| for(set<int>::iterator it = se.begin();it!=se.end();it++) |
| { |
| cout<<*it<<el; |
| } |
| |
| vector<int> ve; |
| ve.push_back(4); |
| for(vector<int>::iterator it = ve.begin();it!=ve.end();it++) |
| { |
| cout<<*it<<el; |
| } |
| |
| queue<int> q; |
| q.push(5); |
| while(!q.empty()) |
| { |
| cout<<q.front()<<el; |
| q.pop(); |
| cout<<q.size()<<el; |
| } |
| |
| stack<int> s; |
| s.push(6); |
| while(!s.empty()) |
| { |
| cout<<s.top()<<el; |
| s.pop(); |
| } |
| |
| vector<pair<int, int> > ves; |
| ves.push_back({7,8}); |
| pair<int, int> iter; |
| for(vector<pair<int,int> >::iterator it = ves.begin();it!=ves.end();it++) |
| { |
| iter = *it; |
| cout<<iter.first<<el; |
| cout<<iter.second<<el; |
| } |
| |
| return 0; |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-04-05 DS博客作业02--栈和队列