【859. Kruskal算法求最小生成树(模板)】教程文章相关的互联网学习教程文章

Bellman-Ford算法模板(以POj 3259为例)

题目:点击打开链接 题意:题目的大意是有F个农场(F组输入数据),每个农场有N个牧场,M条双向路径,W个虫洞,虫洞是单向的,可以实现时间旅行,返回到以前某个时间。问从某个牧场出发,经过若干路径和虫洞,能不能在自己没有离开出发地时回到出发地,见到自己。 分析:其实就是判断是不是存在负环,用Bellman-Ford算法求就可以了。 当图中存在负权环时,就能够在出发之前回到出发地,见着自己,将虫洞的权值变成其相反数,然后再...

基数排序模板(基数排序,C++模板)

算法的理论学习可右转Creeper_LKF大佬的洛谷日报 时间复杂度\(O(n)\),算常数的话要乘位长。 蒟蒻参考了Creeper_LKF大佬的模板,并在通用性上面稍微提升了一点。可以兼容所有存储整数的基本类型,以及在此基础上构建的结构体类型(多关键字排序时,优先级高的关键字默认需要在结构体中靠后)。 函数原型 template<typename T> void Radixsort(T*fst,T*lst,T*buf,int*op) T即为待排序的类型名,fst lst为首尾指针(和sort一样),bu...

【算法模板】欧拉筛法求素数

#include<iostream>using namespace std;const int MAXN=1000000+10;int n,cnt,prime[MAXN]; bool vis[MAXN];void findprime(int n) {for(int i=2;i<=n;i++){if(!vis[i])prime[++cnt]=i;for(int j=1;j<=cnt&&i*prime[j]<=n;j++){vis[i*prime[j]]=true;if(i%prime[j]==0)break;}} }int main() {vis[1]=true;findprime(MAXN);cin>>n; if(!vis[n])cout<<"Yes";else cout<<"No";return 0; }

【算法模板】快速幂

#include <iostream> #define ull unsigned long longusing namespace std;ull fastpow(ull a,ull b,ull mod) {ull ans=1;while(b!=0){if(b&1)ans=ans*a%mod;b>>=1;a=a*a%mod; }return ans%mod; }int main() {ull a,b,mod;cin>>a>>b>>mod;cout<<fastpow(a,b,mod)%mod;return 0; }

C++标准模板库(STL):常用算法

find() ---algorithm中的函数find(start,end,value) start搜寻的起点,end搜寻的终点,要寻找的value值容器的表示方法(只有vector没有内置find()函数,其他容器都有,其他容器用自己的find()函数)find(a.begin(),a.end(),value)数组的表示方法find(a,a+length,val)所有的返回,均是迭代器(容器)或指针(数组),而非是直观感觉上的索引下标。如果在查找范围内不存在,返回a.end(),这里需要注意的是,a.end()不在查...

[洛谷P3386] [模板] 二分图匹配 (匈牙利算法)【代码】

题目传送门 毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配。 网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿)。 对于左边的点一个一个匹配,记录右边哪个点跟左边的i匹配:cp[i] 如果还没有配对,就直接配上。 如果已经有匹配了,每次dfs找增广路(看看能不能换一下),如果成功,那么匹配数增加一。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 using namespace s...

KMP算法模板【代码】

sub[ ]代表子串,str[ ]代表原串,next[ ]代表当sub[i] != str[j]时,子串需要跳到的地方,实现代码如下: 获取next数组的代码: 1 void GetNext()//求子串中的相同的真前缀和真后缀2 {3 memset(next, 0, sizeof(next));4 next[0] = -1;5 int i = 0,j = -1;6 int sub_len = strlen(sub);7 while(i < sub_len)8 {9 if(j == -1 || sub[i] == sub[j]) 10 { 11 i++; 12 ...

P1177 【模板】快速排序 洛谷(c++)(模版)

快速排序模版,代码如下: #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #define ll long long using namespace std ;pair<int,int>partition( vector<int> &a ,int l, int r ){int less = l-1,more = r ;while ( l < more ){if ( a[l] < a[r] ){swap(a[l++],a[++less]) ;}else if ( a[l] > a[r] ){swap(a[l],a[--more]) ;}else{l ++ ;}}swap(a[more],a[r]) ;return make_pa...

归并排序模板【代码】

给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有整数均在 1~109 范围内),表示整个数列。 输出格式 输出共一行,包含 n 个整数,表示排好序的数列。 数据范围 1≤n≤100000 输入样例: 5 3 1 2 4 5 输出样例: 1 2 3 4 5 #include<iostream> using namespace std; int tmp[100005]; void m...

函数模板实现选择排序【代码】

#include<iostream> using namespace std; #include<string>//选择排序 template<typename T> void mysort(T arr[], int len) {for (int i = 0; i < len; i++){int max = i; //认定最大值下标for (int j = i + 1; j < len; j++){if (arr[max] < arr[j]){max = j; //更新认定的最大值}}if (max != i){T temp = arr[max];arr[max] = arr[i];arr[i] = temp;}} } //打印数组模板 template<class T> void print(T arr[], int len) {...