ACM自用模板

2022-06-22 20:39:11 字數 3206 閱讀 9442

#include#include#include#include#include#include#include#include#include#include#include#include//includeusing namespace std;

#define ll long long

#define mod 1000000007

#define maxn 100050

#define inf 0x3f3f3f3f

ll read()

while (ch >= '0' && ch <= '9')

return w * x;

}//int a=read();

template inline bool read(tt& ret)

while (ch != '-' && (ch < '0' || ch>'9'))

sgn = (ch == '-') ? -1 : 1;

ret = (ch == '-') ? 0 : (ch - '0');

while (ch = getchar(), ch >= '0' && ch <= '9')

ret *= sgn;

return 1;}/*

while(read(a))

*/

定義與輸入 example:

pairp;//標頭檔案#includecin >> p.first >> p.second;
比較:比較的時候,優先比較first大小,first相同時比較second。

還可以作為map的鍵值進行插入操作 example:

int main()

};

定義

mapmp;
基本操作

/*  向map中插入元素  */

m[key] = value;

m.insert(make_pair(key, value));

/* 查詢元素 */

int i = m[key];

map::iterator it = m.find(key);

/* 刪除元素 */

m.erase(key); // 刪除與指定key鍵值相匹配的元素對,並返回被刪除的元素的個數。

m.erase(it); // 刪除由迭代器it所指定的元素對,並返回指向下乙個元素對的迭代器。

/* 其他操作 */

m.size(); // 返回元素個數

m.empty(); // 判斷是否為空

m.clear(); // 清空所有元素

ll cnt, head[maxn], d[maxn];

struct node ;

node edge[maxn*2];//雙向圖開兩倍空間

void add(ll x, ll y, ll w)//雙向圖要呼叫兩次

複雜度\(o(eloge)\)

dijkstra本質上的思想是貪心,它只適用於不含負權邊的圖.

ll n, m, s, wi, vi, ui, d[maxn], head[maxn], cnt;

struct node

;node edge[maxn * 2];//開雙倍大小

struct qnode

}now,qt;

priority_queueq;

qnode init(ll x, ll dis)

void add(ll x, ll y, ll z)

void dij(ll s)

d[s] = 0;

now.x = s;

now.dis = 0;

q.push(now);

while (!q.empty())

} }}

int main()

dij(s);

for (register ll i = 1; i <= n; i++)

cout << d[i];

} cout << endl;

return 0;

}

ll cnt, head[maxn], d[maxn],n,m,ui,vi,wi;

struct node ;

node edge[maxn * 2];//雙向圖開兩倍空間

void add(ll x, ll y, ll w)//雙向圖要呼叫兩次

bool bellman_ford(ll s)

d[s] = 0;

for (register int i = 1; i < n; i++)//最多鬆弛n-1次

}} if (!ok)

return 1;//無負環

} for (register int j = 1; j <= n; j++)

}} return 1;

}

// 

#includeusing namespace std;

#define ll int

int read()

while(ch>='0'&&ch<='9')

return w*x;

}int n,m,cnt,tt;

struct node;

node edge[200005];

void add(int a,int b,int w)

bool cmp(node a,node b)

int fa[5005];

int found(int x)

while(x!=r)

return x;

}bool ifin(int a,int b)

void un(int a,int b)

int ans,aa,bb,cc;

int main()

for(register int i=1;i<=m;i++)

sort(edge+1,edge+cnt+1,cmp);//按照邊從小到大排序

for(register int i=1;i<=cnt;i++) }

if(ttelse

return 0;

}

整理自用 模板

2.類模板與模板類 知識點 1.函式模板呼叫時不需要顯式指定型別,系統自動匹配引數型別,若沒有合適的,會進行報錯。2.類模板使用需要顯式指定型別。3.返回值和引數的型別一致。將函式賦值給函式指標之時,尤其需要注意這個問題。4.函式模板是由編譯器根據呼叫型別例項化為可執行的函式。5.函式模版可以針對函...

自用模板 數字dp

include includeint dp 10 3 dp i 0 為位數小於等於i且不含62也不含4的數字的個數 dp i 1 為位數為i且首位為2且不含62也不含4的數字的個數 dp i 2 為位數小於等於i且含62或4的數字的個數 int digit 10 void er int wei in...

最短路模板(自用)

摘自 floyd演算法是多源最短路演算法,複雜度最高 n 3 通常用在點比較少的起點不固定的問題中。能解決負邊 負權 但不能解決負環。dijkstra演算法是單源最短路演算法,最常用時間複雜度 n 2 優化後可以達到 nlogn 不能解決負邊問題,稀疏圖需要耗費比較多的空間。spfa演算法適合稀疏圖...