每一项按顺序理解之后裸敲,每个代码最多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 之省赛任务相关推荐

  1. Hitcon 2016 Pwn赛题学习

    PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...

  2. [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解

    8题只做出4题比较easy的题,而且做得挺麻烦,看来还要多练练. AC的题如下 NEUOJ  1112 I Love Apple Description So many people love app ...

  3. 乌鲁木齐网络赛J题(最小费用最大流模板)

    ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报  分类: 网络流(33)  版权声 ...

  4. 仙居机器人_【101巨喜讯】又一个全国冠军!仙居学子机器人全国赛获奖啦!

    原标题:[101巨喜讯]又一个全国冠军!仙居学子机器人全国赛获奖啦! 仙居私家车广播 美丽仙居,品质广播!欢迎关注仙居最具品质广播微信公众号! 特大喜讯 ! 浙江仙居城峰中学.仙居机器人协会7名学生 ...

  5. 十二届蓝桥杯省赛B组C++解析(填空题部分)

    十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...

  6. as安装过程中gradle_柯赛分享:楼顶大字安装过程中需要用到哪些工具?

    经过前面一系列标识行业常识和制作工艺相关知识的分享,我们知道楼顶大字是标识行业下属的一个重要分支产品类别,也明白了楼顶大字主要制作材料是金属的,尺寸和自重都比较大,运输安装过程相对复杂,安装施工的难度 ...

  7. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  8. 信息安全 数据赛 铁人三项_2018信息安全铁人三项数据赛题解

    前言 由于自己赛区的铁三比赛在最后一场,于是利用闲暇时间做了一下别的赛区的题目,这里给出5月5号比赛的数据赛做题记录 题目分享: 链接: https://pan.baidu.com/s/1b6bkW- ...

  9. 从零开始单排学设计模式「UML类图」定级赛

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

最新文章

  1. SpringBoot用Servlet处理请求
  2. Boost:fork联接的测试程序
  3. iscsi-分区类型
  4. mysql点击计数器_MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能...
  5. JavaScript学习(七)—元素节点的获取方式
  6. 【直播间】移动互联网产品中如何用好HTML5?
  7. 一个项目部署多个节点会导致锁失效么_一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)...
  8. 【CF585-div2:C】Swap Letters(贪心)
  9. 《英雄联盟》捞月狗数据初探
  10. u-boot-2016.09 make工具之fixdep
  11. 校招----吉比特一面面经
  12. Xubuntu22.04安装dock美化任务栏
  13. 微信小程序——云开发|计费方式调整大家怎么看?
  14. 有趣的java编程题_java编程题 有趣的数
  15. scrum立会报告+燃尽图(第三周第二次)
  16. 2-1:编写一个Java应用程序,输出俄文字母表。
  17. docker-compose.yml修改volumes后重启不生效
  18. 基于电影爬虫及Spark数据分析可视化设计
  19. 奇特的一生--时间管理法
  20. 干货!毫米波雷达超强解读

热门文章

  1. 蓝桥杯第七届决赛JAVA真题----路径之谜
  2. 蛮力法在求解“最近对”问题中的应用(JAVA)
  3. myeclipse java注释模板_Eclipse/MyEclipse Java注释模板设置详解 ---转载自百度空间
  4. 计算机网络应用是学什么类型的,计算机网路中服务类型及应用
  5. mysql不兼容_mysql5.7 不兼容问题
  6. android webview es6,Android v 5.0 webview HTML5,CSS3和ES6兼容性
  7. 语言课设医院诊疗系统_江苏孤独症孩子有哪些典型特征?上海六一儿童医院
  8. java连接ldap验证,验证用户使用LDAP登录
  9. 最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
  10. 互联网晚报 | 9月11日 星期六 | 魅蓝宣布正式回归;黑石集团终止收购SOHO中国;“小酒馆第一股”海伦司正式登陆港交所...