大学C组
枚举 【1-3】
排序
-
冒泡排序【2】
-
选择排序【3】
-
插入排序【3】
搜索 【1-5】
BFS
模板:
queue<int> q;
st[1]=true; //点1已经被遍历
q.push(1);
while(q.size()){
int t=q.front();
q.pop();
for(int i=h[t];i!=-1;i=ne[i]){
int j=e[i];
if(!st[j]){
q.push(j);
st[j]=true; //表示点j已经被遍历
}
}
}
#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
const int N=100010;
int n,m,l[N];
int h[N],e[N],ne[N],idx;
bool st[N];
void add(int a,int b){
e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
int bfs(){
queue<int>q;
q.push(1);
st[1]=1;
while(q.size()){
int t=q.front();
q.pop();
for(int i=h[t];i!=-1;i=ne[i]){
int j=e[i];
if(st[j]==0){
q.push(j);
l[j]=l[t]+1;
st[j]=1;
}
}
}
return l[n];
}
int main(){
memset(h,-1,sizeof h);
cin>>n>>m;
while(m--)
{
int a,b;
cin>>a>>b;
add(a,b);
}
cout<<bfs();
return 0;
}
/*
4 5
1 2
2 3
3 4
1 3
1 4
*/
DFS
模板:
int dfs(int u) {
st[u]=1; //表示结点u已经被遍历过
for(int i=h[u]; i!=-1; i=ne[i]) {
int j=e[i];
if(!st[j])
dfs(j);
}
}
#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
const int N=100010;
int n,ans=N;//ans表示答案
int h[N],e[N],ne[N],idx;
bool st[N];
void add(int a,int b) {
e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
int dfs(int u) {
st[u]=1;//表示结点u已经被遍历过
int sum=1,res=0;//sum表示当前子树的结点个数,res表示删除结点u后每个子树最大的结点个数
for(int i=h[u]; i!=-1; i=ne[i]) {
int j=e[i];
if(!st[j]) {
int s=dfs(j);
res=max(res,s);
sum+=s;
}
}
res=max(res,n-sum);
ans=min(ans,res);
return sum;
}
int main() {
memset(h,-1,sizeof h);
cin>>n;
for(int i=1; i<n; i++) {
int a,b;
cin>>a>>b;
add(a,b);
add(b,a);
}
dfs(1);
cout<<ans;
return 0;
}
贪心 【1-5】
模拟 【1-3】
二分 【2-5】
int l=0,r=1e5;
int mid=l+r>>1;
while(l<r){
if(左边的区间不符合条件) l=mid+1;
else r=mid;
}
int mid=l+r+1>>1;
while(l<r){
if(左边区间不符合条件) l=mid;
else r=mid-1;
}
DP(普通一维问题) 【3-5】
高精度 【1-5】
数据结构
栈 【2-4】
队列 【2-5】
链表 【2-5】
数学
初等数论 【3-5】
大学B组
1.排序
(1)归并排序[4-5] (2)快速排序[4-5] (3)桶排序[4] (4)堆排序[4] (5)基数排序[4~5]
2.搜索
(1)剪枝[4-6] (2)双向 BFS[5-6] (3)记忆化搜索[5] (4)迭代加深搜索[5-6] (5)启发式搜索[7]
3.DP
(1)背包 DP[4-6] (2)树形 DP[4-6] (3)状压 DP[5-6] (4)数位 DP[5-6] (5)DP 的常见优化[7]
4.字符串
(1)哈希[4-5] (2)kmp[4-6]
(3)manacher[4-6]
5.图论
(1)欧拉回路[5-7] (2)最小生成树[5-7] (3)单源最短路及差分约束系统[5-7] (4)拓扑序列[5-7] (5)二分图匹配[7] (6)图的连通性问题(割点、桥、强连通 分量)[7] (7)DFS 序[5-7] (8)最近共同祖先[5-7]
6.数学
(1)排列组合[5-6] (2)二项式定理[6] (3)容斥原理[6-7] (4)模意义下的逆元[5] (5)矩阵运算[6-7] (6)高斯消元[7]
7.数据结构
(1)ST 表[5-6] (2)堆[5-6] (3)树状数组[5-6] (4)线段树[6-7] (5)Trie 树[5-7] (6)并查集[5-6] (7)平衡树(利用系统自带的标准库实现简 单平衡树)[5-7]
8.计算几何
(1)基础计算和基本位置关系判定[6-7] (2)概率论[7+] (3)博弈论[7+]