SCAU_WeiShenWahle 之省赛任务
每一项按顺序理解之后裸敲,每个代码最多15分钟,用模板题来测,超过15分钟算未理解
线段树
平衡树( Treap , sbt , spt )
#include <iostream> #include <cstdio> using namespace std ; const int N = 1000010 ; struct node {int lr , rr , r , v ;node(){}node( int lr , int rr , int r , int v ):lr(lr),rr(rr),r(r),v(v) {} }; struct Treap {node e[N];int root , size ;void init() {size = 0 ; root = -1 ;}void Rot_l( int &o ) {int tmp = e[o].rr ;e[o].rr = e[tmp].lr ;e[tmp].lr = o ;o = tmp ;}void Rot_r( int &o ) {int tmp = e[o].lr ;e[o].lr = e[tmp].rr ;e[tmp].rr = o ;o = tmp ;}void insert( int &o , int v , int r ) {if( o == -1 ) {o = size++ ;e[o].lr = e[o].rr = -1 ;e[o].r = r , e[o].v = v ;} else if( v < e[o].v ) {insert( e[o].lr , v , r ) ;if( e[ e[o].lr ].r > e[o].r ) Rot_r(o) ;} else {insert( e[o].rr , v , r );if( e[ e[o].rr ].r > e[o].r ) Rot_l(o) ;}}void remove( int &o , int x ) {if( e[o].v == x ) {if( e[o].lr == -1 ) {o = e[o].rr ;} else if( e[o].rr == -1 ) {o = e[o].lr ;} else {if( e[ e[o].lr ].r > e[ e[o].rr ].r ) {Rot_r(o);remove( e[o].rr , x );} else {Rot_l(o);remove( e[o].lr , x ) ;}}} else if( e[o].v > x ) {remove( e[o].lr , x ) ;} else {remove( e[o].rr , x ) ;}}int Find_max( int o ) {if( o == -1 ) return -1 ;while( e[o].rr != -1 ) o = e[o].rr ;cout << e[o].r << endl ;return e[o].v ;}int Find_min( int o ) {if( o == -1 ) return -1 ;while( e[o].lr != -1 ) o = e[o].lr ;cout << e[o].r << endl ;return e[o].v ;} } T ;int Run () {int op , x , y ;T.init() ;while( cin >> op ) {if( !op ) {break ;} else if( op == 1 ) {cin >> x >> y ;T.insert( T.root , y , x ) ;} else if( op == 2 ) {x = T.Find_max( T.root ) ;if( x == -1 ) { cout << '0' << endl ; continue ; }T.remove( T.root , x ) ;} else {x = T.Find_min( T.root ) ;if( x == -1 ) { cout << '0' << endl ; continue ; }T.remove( T.root , x ) ;}}return 0 ; } int main () {ios::sync_with_stdio(0);return Run() ; }
Treap
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 2000010; const int M = 10000010; int mp[M]; struct node {int lr , rr , siz , v ;node(){}node( int lr , int rr , int siz , int v ):lr(lr),rr(rr),siz(siz),v(v){} }; struct SBT {node e[N] ;int rt , tot;void init() { rt = tot = 1 ; }void Rot_l( int &o ) {int y = e[o].rr ;e[o].rr = e[y].lr;e[y].lr = o ;e[y].siz = e[o].siz ;e[o].siz = e[ e[o].lr ].siz + e[ e[o].rr ].siz + 1 ;o = y ;}void Rot_r( int &o ) {int y = e[o].lr ;e[o].lr = e[y].rr ;e[y].rr = o ;e[y].siz = e[o].siz ;e[o].siz = e[ e[o].lr ].siz + e[ e[o].rr ].siz + 1 ;o = y ;}void Maintain( int &o , bool flag ) {if( !flag ) {if( e[ e[ e[o].lr ].lr ].siz > e[ e[o].rr ].siz ) {Rot_r(o) ;} else if( e[ e[ e[o].lr ].rr ].siz > e[ e[o].rr ].siz ) {Rot_l( e[o].lr ) ;Rot_r(o);} else return ;} else {if( e[ e[ e[o].rr ].rr ].siz > e[ e[o].lr ].siz ) {Rot_l(o) ;} else if( e[ e[ e[o].rr ].lr ].siz > e[ e[o].lr ].siz ) {Rot_r( e[o].rr ) ;Rot_l(o);} else return ;}Maintain( e[o].lr , false ) ;Maintain( e[o].rr , true ) ;Maintain( o , false ) ;Maintain( o , true ) ;}void Insert( int &o , int v ) {if( !o ) {o = tot++ ;e[o] = node( 0 , 0 , 1 , v ) ;return ;} else {e[o].siz++ ;if( v < e[o].v ) {Insert( e[o].lr , v ) ;} else {Insert( e[o].rr , v ) ;}}Maintain(o, v >= e[o].v ) ;}void Delete( int &o , int v ) {if( !o ) return ;e[o].siz-- ;if( v < e[o].v ) Delete( e[o].lr , v ) ;else if( v > e[o].v ) Delete( e[o].rr , v ) ;else {if( e[o].lr == 0 ) o = e[o].rr ;else if( e[o].rr == 0 ) o = e[o].lr ;else {int y = e[o].rr ;while( e[y].lr ) y = e[y].lr ;e[o].v = e[y].v ;Delete( e[o].rr , e[y].v ) ;}}}int Find_Max( int &o ) {int y = o ;while( e[y].rr ) y = e[y].rr ;return e[y].v ;}int Find_Min( int &o ) {int y = o ;while( e[y].lr ) y = e[y].lr ;return e[y].v ;} } T ; int Run() {int op , x , y ; T.init();while( cin >> op ) {if( op == 0 ) break ;else if( op == 1 ) {cin >> x >> y ;mp[y] = x ;T.Insert( T.rt , y ) ;} else if( op == 2 ) {if( T.e[T.rt].siz == 0 ) {cout << '0' << endl ;} else {int v = T.Find_Max( T.rt ) ;cout << mp[v] << endl ;T.Delete(T.rt,v);}} else {if( T.e[T.rt].siz == 0 ) {cout << '0' << endl ;} else {int v = T.Find_Min( T.rt );cout << mp[v] << endl ;T.Delete(T.rt,v);}}}return 0 ; } int main() {#ifdef LOCALfreopen("in","r",stdin);#endifios::sync_with_stdio(0);return Run(); }
Size Balance Tree
二叉堆
const int N = 1000010 ; int h[N] , size ; void Modify( int p ) {if( p == 1 ) return ;if( h[p>>1] > h[p] ) swap( h[p>>1] , h[p] ) , Modify( p>>1 ) ; }void Update( int p ) {int l = p<<1 , r = p<<1|1 , f = p ;if( l <= size && h[l] < h[f] ) f = l ;if( r <= size && h[r] < h[f] ) f = r ;if( p != f ) swap( h[f] , h[p] ) , Update(f) ; }void Pop() {swap( h[1] , h[size--] ) ; Update(1) ; }void Push( int x ) {h[++size] = x ; Modify( size ) ; }
View Code
左偏树
最大优先 ~ 可合并堆
const int N = 100010 ; struct node {int lr , rr , dis , fa , val ; } T[N] ;inline int find( int k ) { return k == T[k].fa ? k : T[k].fa = find(T[k].fa) ; }int Merge( int a , int b ) {if( !a ) return b ;if( !b ) return a ;if( T[a].val < T[b].val ) swap( a , b ) ;T[a].rr = Merge( b , T[a].rr ) ;T[ T[a].rr ].fa = a ;if( T[ T[a].lr ].dis < T[ T[a].rr ].dis ) swap( T[a].lr , T[a].rr ) ;if( T[a].rr == 0 ) T[a].dis = 0 ;else T[a].dis = T[ T[a].rr ].dis + 1 ;return a ; }int Pop( int a ) {int l = T[a].lr , r = T[a].rr ;T[l].fa = l , T[r].fa = r ;T[a].lr = T[a].rr = T[a].dis = 0 ;return Merge( l , r ) ; }
View Code
最短路( Dij , Spfa )
匈牙利
HK
带花树
Dinic
const int N = 404; const int M = 30030 ; const int inf = 1e9 ;int s , t , n , m ; int eh[N] , ef[M] , et[M] , ec[M] , nxt[M] , tot ; int cur[N] , d[N] ; bool vis[N] ;void init() {memset( eh , -1 , sizeof eh ) ;tot = 0 ; } void addedge( int u , int v, int c , int f ) {et[tot] = v , ec[tot] = c , ef[tot] = f , nxt[tot] = eh[u] , eh[u] = tot++ ;et[tot] = u , ec[tot] = 0 , ef[tot] = f , nxt[tot] = eh[v] , eh[v] = tot++ ; }bool bfs() {memset( vis , false , sizeof vis ) ;queue<int>que;que.push(s);vis[s] = true ;d[s] = 0 ;while( !que.empty() ) {int u = que.front() ; que.pop() ;for( int i = eh[u] ; ~i ; i = nxt[i] ) {int v = et[i] ;if( !vis[v] && ef[i] < ec[i] ) {vis[v] = true ;d[v] = d[u] + 1 ;que.push(v);}}}return vis[t] ; }int dfs( int x , int a ) {if( x == t || a == 0 ) return a ;int flow = 0 , F ;for( int &i = cur[x] ; ~i ; i = nxt[i] ) {int v = et[i] , c = ec[i] , &f = ef[i] ;if( d[x] + 1 == d[v] && ( F = dfs( v , min( a , c - f ) ) ) > 0 ) {f += F , ef[i^1] -= F , a -= F , flow += F ;if( a == 0 ) break ;}}return flow ; }int MF() {int flow = 0 ;while( bfs() ) {memcpy( cur , eh , sizeof eh ) ;flow += dfs( s , 10000000 );}return flow ; }
View Code
ISAP
const int N = 1020 ; const int M = 300010 ; const int INF = 0x3f3f3f3f; int n , m , s , t ; int eh[N] , et[M] , nxt[M] , ef[M] , ec[M] , tot ;void init() {memset( eh , -1 , sizeof eh ) ;tot = 0 ; }void addedge( int u , int v , int c ) {et[tot] = v ; ec[tot] = c ; ef[tot] = 0 ; nxt[tot] = eh[u] ; eh[u] = tot++;et[tot] = u ; ec[tot] = 0 ; ef[tot] = 0 ; nxt[tot] = eh[v] ; eh[v] = tot++; }int d[N] , cur[N] , pre[N] , gap[N] ; int Q[M] , S[M] ;void bfs() {memset( d , -1 , sizeof d ) ;memset( gap , 0 , sizeof gap ) ;int head = 0 , tail = 0 ;d[t] = 0 ; gap[0]++ ;Q[tail++] = t ;while( head < tail ) {int u = Q[head++] ;for( int i = eh[u] ; ~i ; i = nxt[i] ) {int v = et[i] ;if( d[v] != -1 ) continue ;Q[tail++] = v ;d[v] = d[u] + 1;gap[ d[v] ]++;}} }int Sap( int n ) {bfs();memcpy( cur , eh , sizeof eh ) ;int top = 0 , u = s , flow = 0 ;while( d[s] < n ) {if( u == t ) {int Min = INF , inser ;for( int i = 0 ; i < top ; ++i ) {if( Min > ec[ S[i] ] - ef[ S[i] ] ) {Min = ec[ S[i] ] - ef[ S[i] ] ;inser = i ;}}for( int i = 0 ; i < top ; ++i ) {ef[ S[i] ] += Min ;ef[ S[i]^1 ] -= Min ;}flow += Min ;top = inser ;u = et[ S[top]^1 ];continue ;}bool flag = false ;int v ;for( int i = cur[u] ; ~i ; i = nxt[i] ) {v = et[i] ;if( ec[i] > ef[i] && d[v] + 1 == d[u] ) {flag = true ;cur[u] = i ;break ;}}if( flag ) {S[top++] = cur[u] ;u = v ;continue ;}int Min = n ;for( int i = eh[u] ; ~i ; i = nxt[i] ) {if( ec[i] > ef[i] && d[ et[i] ] < Min ) {Min = d[ et[i] ] ;cur[u] = i ;}}gap[ d[u] ]-- ;if( !gap[ d[u] ] ) return flow ;d[u] = Min + 1 ;gap[ d[u] ]++ ;if( u != s ) u = et[ S[--top]^1 ] ;}return flow ; }
View Code
MCMF
const int N = 10000; const int M = 100000; const int INF = 0x3f3f3f3f;int eh[N] , ec[M] , et[M] , ef[M] , ew[M] , nxt[M] , tot ; int pre[N] , dis[N] ; bool vis[N] ; int s , t , n , m , k ; void init() {memset( eh, -1 , sizeof eh );tot = 0 ; } void addedge( int u , int v , int cap , int cost ) {et[tot] = v ; ef[tot] = 0 ; ec[tot] = cap ; ew[tot] = cost ; nxt[tot] = eh[u] ; eh[u] = tot++ ;et[tot] = u ; ef[tot] = 0 ; ec[tot] = 0 ; ew[tot] = -cost ; nxt[tot] = eh[v] ; eh[v] = tot++ ; }bool spfa() {memset( vis, false, sizeof vis ) ;memset( dis ,0x3f , sizeof dis ) ;memset( pre , -1 ,sizeof pre ) ;queue<int>que;dis[s] = 0 ;vis[s] = true ;que.push(s) ;while( !que.empty() ) {int u = que.front() ; que.pop() ;vis[u] =false ;for( int i = eh[u] ; ~i ; i = nxt[i] ) {int v = et[i] ;if( ec[i] > ef[i] && dis[v] > dis[u] + ew[i] ) {dis[v] = dis[u] + ew[i] ;pre[v] = i ;if( !vis[v] ) {vis[v] = true ;que.push(v) ;}}}}return pre[t] != -1 ; }int MCMF( int &cost ) {int flow = 0 ;cost = 0 ;while( spfa() ) {int Min = INF ;for( int i = pre[t] ; ~i ; i = pre[ et[i^1] ] ) {if( Min > ec[i] - ef[i] ) {Min = ec[i] - ef[i] ;}}for( int i = pre[t] ; ~i ; i = pre[ et[i^1] ] ) {ef[i] += Min ;ef[i^1] -= Min ;cost += ew[i] * Min ;}flow += Min ;}return flow ; }
View Code
BCC
SCC
KMP
Manancher
AC自动机
后缀数组
后缀自动机
DXL(精确覆盖,模糊覆盖)
转载于:https://www.cnblogs.com/hlmark/p/4464256.html
SCAU_WeiShenWahle 之省赛任务相关推荐
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
- [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解
8题只做出4题比较easy的题,而且做得挺麻烦,看来还要多练练. AC的题如下 NEUOJ 1112 I Love Apple Description So many people love app ...
- 乌鲁木齐网络赛J题(最小费用最大流模板)
ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报 分类: 网络流(33) 版权声 ...
- 仙居机器人_【101巨喜讯】又一个全国冠军!仙居学子机器人全国赛获奖啦!
原标题:[101巨喜讯]又一个全国冠军!仙居学子机器人全国赛获奖啦! 仙居私家车广播 美丽仙居,品质广播!欢迎关注仙居最具品质广播微信公众号! 特大喜讯 ! 浙江仙居城峰中学.仙居机器人协会7名学生 ...
- 十二届蓝桥杯省赛B组C++解析(填空题部分)
十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...
- as安装过程中gradle_柯赛分享:楼顶大字安装过程中需要用到哪些工具?
经过前面一系列标识行业常识和制作工艺相关知识的分享,我们知道楼顶大字是标识行业下属的一个重要分支产品类别,也明白了楼顶大字主要制作材料是金属的,尺寸和自重都比较大,运输安装过程相对复杂,安装施工的难度 ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...
- 信息安全 数据赛 铁人三项_2018信息安全铁人三项数据赛题解
前言 由于自己赛区的铁三比赛在最后一场,于是利用闲暇时间做了一下别的赛区的题目,这里给出5月5号比赛的数据赛做题记录 题目分享: 链接: https://pan.baidu.com/s/1b6bkW- ...
- 从零开始单排学设计模式「UML类图」定级赛
阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...
最新文章
- SpringBoot用Servlet处理请求
- Boost:fork联接的测试程序
- iscsi-分区类型
- mysql点击计数器_MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能...
- JavaScript学习(七)—元素节点的获取方式
- 【直播间】移动互联网产品中如何用好HTML5?
- 一个项目部署多个节点会导致锁失效么_一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)...
- 【CF585-div2:C】Swap Letters(贪心)
- 《英雄联盟》捞月狗数据初探
- u-boot-2016.09 make工具之fixdep
- 校招----吉比特一面面经
- Xubuntu22.04安装dock美化任务栏
- 微信小程序——云开发|计费方式调整大家怎么看?
- 有趣的java编程题_java编程题 有趣的数
- scrum立会报告+燃尽图(第三周第二次)
- 2-1:编写一个Java应用程序,输出俄文字母表。
- docker-compose.yml修改volumes后重启不生效
- 基于电影爬虫及Spark数据分析可视化设计
- 奇特的一生--时间管理法
- 干货!毫米波雷达超强解读
热门文章
- 蓝桥杯第七届决赛JAVA真题----路径之谜
- 蛮力法在求解“最近对”问题中的应用(JAVA)
- myeclipse java注释模板_Eclipse/MyEclipse Java注释模板设置详解 ---转载自百度空间
- 计算机网络应用是学什么类型的,计算机网路中服务类型及应用
- mysql不兼容_mysql5.7 不兼容问题
- android webview es6,Android v 5.0 webview HTML5,CSS3和ES6兼容性
- 语言课设医院诊疗系统_江苏孤独症孩子有哪些典型特征?上海六一儿童医院
- java连接ldap验证,验证用户使用LDAP登录
- 最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
- 互联网晚报 | 9月11日 星期六 | 魅蓝宣布正式回归;黑石集团终止收购SOHO中国;“小酒馆第一股”海伦司正式登陆港交所...