-
个人简介
从2024.8.25号开始,就要离开老赛码了,呜呜呜呜呜呜呜呜呜呜
冲刺777道(要走了冲刺不了了呜呜呜呜呜呜呜呜呜)
ybhome.iok.la:8888 集训域
主页的乱七八糟都删了,已老实,求放过
/* ┏┓ ┏┓ ┏┛┻━━━┛┻┓ ┃ ┃ ┃ ━ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┃ ┃ ┻ ┃ ┃ ┃ ┗━┓ ┏━┛Codes are far away from bugs with the animal protecting ┃ ┃ 神兽保佑,代码无bug ┃ ┃ ┃ ┗━━━┓ ┃ ┣┓ ┃ ┏┛ ┗┓┓┏━┳┓┏┛ orz orz orz orz orz ┃┫┫ ┃┫┫ orz orz orz orz orz ┗┻┛ ┗┻┛ ○| ̄|_ orz orz orz orz orz */
图(关系结构)
由点和边构成的集合
- 无向图
- 有向图
带权图
度
出度:从一个点出去的边的数量
入度:进入一个点的边的数量
连通图
概念:一个图中所有点之间至少存在一条路径(路径:一个点有一条路到达另一个点)的图
无向图:连通图
有向图
-
弱连通图:将此图转换为无向图后,是连通状态,即为若连通
-
强连通图:有向图中任意一点都存在一条到达其余所有点的路径
完全图
一张图中,任意两点之间均有着一条直接连接的边
树
概念:只有n-1(n:点的数量)条边的连通图
点和点之间的关系
- 父子
- 兄弟
- 祖孙
度:一个点的儿子数量
节点类型
- 根结点
- 分支节点
- 叶子节点
完全二叉树
概念:按照每一层节点依次填充的顺序的二叉树,是完全二叉树
特性:
- n层的二叉树,最多共有** 2n−12n−1个节点**
- 二叉树第n层,最多有个2n−12n**−1节点**
满二叉树
概念:n层的二叉树中所有分支节点的度数都为2
最小生成树
kruskal算法
#include<iostream> #include<cmath> #include<vector> #include<algorithm> using namespace std; //kruskal算法 const int N=2e5+7; int n,m,p[N]; struct edge{ int u,v,w; bool operator < (const edge t){ return w<t.w; } }edges[N]; int find(int x){ if(p[x]!=x)p[x]=find(p[x]); return p[x]; } bool merge(int a,int b){ int fa=find(p[a]),fb=find(b); if(fa==fb)return false; p[fa]=fb; return true; } void kruskal(){ sort(edges+1,edges+1+m); for(int i=1;i<=n;i++)p[i]=i; int sum=0; for(int i=1;i<=m;i++){ int u=edges[i].u,v=edges[i].v,w=edges[i].w; if(merge(u,v)){ sum+=w; } } cout<<sum<<endl; } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; edges[i]={u,v,w}; } kruskal(); return 0; }
拓扑排序
//方法一 bool toposort() { vector<int> L; queue<int> S; for (int i = 1; i <= n; i++) if (in[i] == 0) S.push(i); while (!S.empty()) { int u = S.front(); S.pop(); L.push_back(u); for (auto v : G[u]) { if (--in[v] == 0) { S.push(v); } } } if (L.size() == n) { for (auto i : L) cout << i << ' '; return true; } else { return false; } } //方法二 #include<iostream> #include<vector> #include<queue> #include<stack> using namespace std; int n,m; int in[100005]; vector<int> vt[100005]; //int out[1000005]; int main(){ cin>>n>>m; while(m--){ int a,b; cin>>a>>b; vt[a].push_back(b); in[b]++; //out[b]++; } stack<int> stk; for(int i=1;i<=n;i++){ if(in[i]==0) stk.push(i); } while(!stk.empty()){ int p=stk.top(); stk.pop(); cout<<p<<" "; for(int i=0;i<vt[p].size();i++){ int t=vt[p][i];//获取这条边的终点 in[t]--; if(in[t]==0){ stk.push(t); } } } return 0; }
迪杰斯特拉
struct edge { int v, w; }; struct node { int dis, u; bool operator>(const node& a) const { return dis > a.dis; } }; vector<edge> e[maxn]; int dis[maxn], vis[maxn]; priority_queue<node, vector<node>, greater<node> > q; void dijkstra(int n, int s) { memset(dis, 0x3f, (n + 1) * sizeof(int)); dis[s] = 0; q.push({0, s}); while (!q.empty()) { int u = q.top().u; q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto ed : e[u]) { int v = ed.v, w = ed.w; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; q.push({dis[v], v}); } } } }
位运算符
左移运算:
<<
用法:** **
x<<y
作用:将表示** x 的二进制数的每一位左移 **y 位,移出去的数就丢掉,空余地方用 0 补位。
例如:一个二进制数 10101011 将其左移 3 位,得到 01011000。
右移运算:
>>
用法:
x>>y
作用:将表示** x 的二进制数的每一位右移 **y 位,移出去的数就丢掉,空余地方用 0 补位。
例如:一个二进制数 10101011 将其右移 3 位,得到 00010101。
按位与运算:
&
用法:
x&y
作用:按位进行与运算。
例如:1101 和 0011 进行与运算就为:0001。
按位或运算:
|
用法:
x|y
作用:按位进行或运算。
例如:1101 和 0011 进行或运算就为:1111。
按位异或运算:
^
用法:
x^y
作用:按位进行异或运算。
例如:1101 和 0011 进行异或运算就为:0001。
按位非运算:
~
用法:
~x
作用:按位进行非运算。
例如:1101进行非运算就为:0010。
状态压缩常用位运算符技巧
1.取出x的第k位:
y = x&(1<<(k-1));//i<<(k-1)能够做成一个第k为1,其余位为0,如:10000 的二进制数,再结合位与运算就能提取到变量x的二进制中第k位数为1还是0了,常用于判断
2.将x第k位取反:
x ^= (1<<(k-1));//通过左移制作一个10000般的二进制数,然后结合异或运算的特点,将变量x的二进制中第k位数取反
3.将x第k位变为1:
x |= (1<<(k-1));//通过左移制作一个10000般的二进制数,然后结合异或运算的特点,将变量x的二进制中第k位数修改为1
4.将x第k位变为0:
x &= (~(1<<(k-1))); //通过左移制作一个0001 0000般的二进制数,然后位非运算将其修改为1110 0000般的二进制数,最后结合位与运算的特点,将变量x的二进制中第k位数修改为0
5.将x最靠右的1去掉:
x = x&(x-1); //减去1会将数字二进制中末尾的1去掉,然后需要借位的地方全变为1,如原1010 0000,减去1后变成1001 1111,再进位与运算得1000 0000,相当于去掉末尾1
6.取出x最靠右的1:
y = x&(-x); //结合负数的二进制的特点,如数字20的二进制为0001 0100,-20的二进制为1110 1100,再进行位与运算能够获取到二进制数100也就是4,及提前数字x中包含的最大2的指数值
7.判断是否有两个连续的一:
if(x&(x<<1)) cout<<"YES"; //左移后的数字会进行偏移,如13的二进制0000 1101,左移后未0001 1010,再进行位与运算,连续的1会在偏移后有至少一个1重叠,让结果不为0,如果结果为0,说明不存在连续的1
8.枚举子集:
for( int x = sta ; x ; x = ( ( x - 1 )&sta) ) cout<<x;//通过技巧6的方式,如二进制:1011 0101,此循环能够枚举1011 0101、1011 0100、1011 0000、1010 0000、1000 0000这几个数据,即十进制:181、180、176、160、128这几个数字。
freopen("A.in","r",stdin); freopen("A.out","w",stdout);
深搜模板
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<string> #include<algorithm> #include<queue> #include<stack> #include<map> #include<deque> using namespace std; int n,m; char mat[505][505]; int vis[505][505]; int dx[4]={1,0,-1,0};//下右上左 int dy[4]={0,1,0,-1} ; int flag=0; void dfs(int x,int y){ vis[x][y]=1; if(mat[x][y]=='g'){ flag=1; return; } for(int i=0;i<4;i++){ int tx=dx[i]+x; int ty=dy[i]+y; if(mat[tx][ty]=='#') continue; if(vis[tx][ty]==1) continue; if(tx<1||tx>n||ty<1||ty>m) continue; dfs(tx,ty); } } int main(){ cin>>n>>m; int a,b; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mat[i][j]; if(mat[i][j]=='s'){ a=i,b=j; } } } dfs(a,b); if(flag) cout<<"Yes"; else cout<<"No"; return 0; }
GESP二级考点
GESP三级考点
让我看看是哪个小可爱这么无聊没写完代码在看别人主页看到底的鸭~~,赶紧去写代码!!!啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈哈哈
-
通过的题目
- P1
- P2
- P3
- P4
- P5
- P6
- P7
- P8
- P9
- P10
- P11
- P12
- P13
- P14
- P15
- P16
- P17
- P20
- P21
- P22
- P23
- P24
- P25
- P26
- P28
- P29
- P30
- P31
- P32
- P33
- P34
- P37
- P38
- P39
- P40
- P41
- P45
- P46
- P47
- P49
- P50
- P52
- P53
- P54
- P55
- P56
- P57
- P58
- P60
- P61
- P62
- P63
- P64
- P65
- P66
- P67
- P68
- P69
- P70
- P71
- P72
- P73
- P74
- P77
- P78
- P79
- P80
- P81
- P82
- P83
- P84
- P85
- P88
- P89
- P90
- P92
- P93
- P94
- P95
- P96
- P97
- P98
- P99
- P100
- P101
- P102
- P103
- P104
- P106
- P108
- P110
- P111
- P112
- P113
- P114
- P115
- P119
- P120
- P122
- P124
- P125
- P129
- P131
- P134
- P135
- P136
- P138
- P139
- P140
- P141
- P142
- P144
- P147
- P149
- P150
- P151
- P152
- P155
- P156
- P158
- P165
- P167
- P173
- P174
- P180
- P181
- P182
- P183
- P185
- P186
- P187
- P188
- P189
- P190
- P198
- P199
- P205
- P208
- P209
- P211
- P212
- P225
- P226
- P236
- P239
- P242
- P244
- P250
- P251
- P256
- P261
- P272
- P284
- P288
- P290
- P291
- P292
- P296
- P298
- P299
- P301
- P302
- P305
- P307
- P308
- P312
- P315
- P316
- P317
- P330
- P336
- P339
- P340
- P342
- P343
- P344
- P347
- P352
- P361
- P364
- P373
- P374
- P375
- P379
- P381
- P388
- P393
- P395
- P398
- P401
- P407
- P409
- P413
- P416
- P421
- P436
- P439
- P447
- P449
- P450
- P451
- P452
- P453
- P454
- P456
- P457
- P458
- P463
- P465
- P466
- P467
- P469
- P472
- P473
- P474
- P475
- P476
- P477
- P478
- P479
- P480
- P482
- P483
- P484
- P486
- P487
- P489
- P490
- P493
- P495
- P498
- P499
- P502
- P504
- P505
- P508
- P519
- P521
- P524
- P525
- P526
- P531
- P538
- P540
- P542
- P545
- P547
- P553
- P554
- P556
- P558
- P561
- P564
- P565
- P566
- P567
- P584
- P586
- P588
- P589
- P595
- P596
- P597
- P600
- P603
- P616
- P617
- P619
- P627
- P629
- P631
- P640
- P650
- P653
- P657
- P660
- P664
- P668
- P669
- P670
- P671
- P673
- P674
- P675
- P677
- P681
- P682
- P683
- P687
- P688
- P695
- P697
- P707
- P708
- P709
- P713
- P714
- P722
- P723
- P724
- P725
- P727
- P729
- P730
- P735
- P737
- P738
- P739
- P748
- P750
- P751
- P752
- P755
- P761
- P763
- P765
- P766
- P774
- P775
- P779
- P780
- P781
- P782
- P785
- P786
- P787
- P791
- P800
- P801
- P804
- P805
- P806
- P813
- P819
- P823
- P832
- P833
- P834
- P835
- P864
- P865
- P866
- P894
- P895
- P897
- P899
- P900
- P901
- P902
- P903
- P907
- P908
- P925
- P927
- P932
- P933
- P934
- P935
- P936
- P947
- P948
- P950
- P951
- P952
- P954
- P958
- P959
- P961
- P962
- P963
- P964
- P965
- P971
- P973
- P974
- P976
- P980
- P991
- P994
- P996
- P1001
- P1003
- P1013
- P1014
- P1018
- P1019
- P1025
- P606
- P613
- P1052
- P1053
- P1061
- P1063
- P1069
- P1086
- P1095
- T1
- T10
- T100
- T101
- T103
- T106
- T107
- T108
- T109
- T11
- T112
- T119
- T12
- T120
- T123
- T125
- T126
- T128
- T13
- T130
- T136
- T14
- T142
- T144
- T145
- T149
- T15
- T150
- T153
- T155
- T156
- T157
- T159
- T16
- T160
- T161
- T163
- T166
- T17
- T170
- T172
- T175
- T18
- T182
- T183
- T185
- T188
- T19
- T192
- T2
- T20
- T200
- T205
- T21
- T212
- T214
- T215
- T219
- T22
- T223
- T224
- T227
- T230
- T234
- T24
- T240
- T25
- T26
- T27
- T272
- T273
- T284
- T293
- T299
- T3
- T30
- T304
- T306
- T309
- T311
- T312
- T313
- T314
- T325
- T333
- T345
- T359
- T360
- T361
- T362
- T364
- T392
- T394
- T397
- T4
- T40
- T410
- T411
- T433
- T437
- T462
- T471
- T5
- T66
- T67
- T7
- T8
- T94
- T99
- P1716
- P1721
- P1967
- P1972
- P1973
- P1984
- P1988
- P1991
- Z1
- P1995
- Z2
- Z3
- P2011
- Z4
- Z5
- Z6
- Z7
- Z8
- Z9
- Z12
- Z13
- Z15
- Z17
- Z18
- Z19
- Z21
- Z23
- Z25
- Z28
- Z30
- Z31
- Z32
- Z33
- Z34
- Z37
- P2038
- P2041
- P2045
- P2048
- P2052
- P2056
- P2070
- P2078
- P2085
- P2086
- P2100
- P2116
- P2125
- pig003
- P2140
- P2158
- P2164
- P2167
- P2170
- P2172
- P2015
- P2016
- P2194
- Z40
- Z44
- Z42
- Z41
- P2223
- P2225
- P2227
- P2239
- P2240
- P2242
- P2243
- P2256
- P2299
- P2304
- P2307
- P2315
- P2337
- P2375
- P2376
- P2380
- P2430
- P2432
- Y21
- Y22
- P2456
- P2529
- P2532
- P2533
- P2566
- P2567
- P2582
- P2583
- P2596
- P2603
- P2609
- P2614
- P2618
- P2622
- P2630
- P2638
- P2640
- P2649
- P2650
- P2651
- P2652
- P2653
- P2654
- P2657
- P2658
- P2666
- P2668
- P2669
- P2670
- P2673
- P2678
- P2679
- P2712
- P2715
-
最近活动
题目标签
- 初窥门径
- 125
- 一本通编程启蒙
- 109
- 略有小成
- 66
- 驾轻就熟
- 63
- 循环结构
- 62
- 融会贯通
- 57
- 分支结构
- 55
- 顺序结构
- 48
- 其他
- 29
- 动态规划
- 29
- 模拟
- 26
- 数据结构
- 23
- 循环嵌套
- 18
- 排序
- 18
- 贪心
- 18
- 一维数组
- 17
- 字符串
- 17
- DFS
- 17
- 队列
- 16
- 搜索
- 15