先占个坑

[update]NOIp结束了,已弃 PS:貌似只整理了图论和一点数据结构......




一、图论

1.单源最短路

洛谷P3371

(1)spfa

已加SLF优化 419ms

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=1e4+,M=5e5+,INF=;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. int n,m,s,u,v,w;
  14. struct edge{
  15. int v,ne,w;
  16. }e[M<<];
  17. int h[N],cnt=;
  18. inline void ins(int u,int v,int w){
  19. cnt++;
  20. e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
  21. }
  22. inline void lop(int &x){if(x==N) x=;else if(x==) x=N-;}
  23. int d[N],q[N],head,tail,inq[N];
  24. void spfa(int s){
  25. for(int i=;i<=n;i++) d[i]=INF;
  26. head=tail=;
  27. q[tail++]=s;inq[s]=;d[s]=;
  28. while(head!=tail){
  29. int u=q[head++];inq[u]=;lop(head);
  30. for(int i=h[u];i;i=e[i].ne){
  31. int v=e[i].v,w=e[i].w;
  32. if(d[v]>d[u]+w){
  33. d[v]=d[u]+w;
  34. if(!inq[v]){
  35. if(d[v]<d[q[head]]) head--,lop(head),q[head]=v;
  36. else q[tail++]=v,lop(tail);
  37. inq[v]=;
  38. }
  39. }
  40. }
  41. }
  42. }
  43. int main(){
  44. n=read();m=read();s=read();
  45. for(int i=;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}
  46. spfa(s);
  47. for(int i=;i<=n;i++) printf("%d ",d[i]);
  48. }

(2)dijkstra 503ms

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <queue>
  6. using namespace std;
  7. const int N=1e4+,M=5e5+,INF=;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x;
  13. }
  14. int n,m,s,u,v,w;
  15. struct edge{
  16. int v,ne,w;
  17. }e[M];
  18. int h[N],cnt=;
  19. inline void ins(int u,int v,int w){
  20. cnt++;
  21. e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
  22. }
  23. struct hn{
  24. int u,d;
  25. hn(int a=,int b=):u(a),d(b){}
  26. bool operator <(const hn &r)const{return d>r.d;}
  27. };
  28. priority_queue<hn> q;
  29. int d[N],done[N];
  30. void dij(int s){
  31. for(int i=;i<=n;i++) d[i]=INF;
  32. d[s]=;
  33. q.push(hn(s,));
  34. while(!q.empty()){
  35. hn x=q.top();q.pop();
  36. int u=x.u;if(done[u]) continue;
  37. done[u]=;
  38. for(int i=h[u];i;i=e[i].ne){
  39. int v=e[i].v,w=e[i].w;
  40. if(d[v]>d[u]+w){
  41. d[v]=d[u]+w;
  42. if(!done[v]) q.push(hn(v,d[v]));//xiao you hua
  43. }
  44. }
  45. }
  46. }
  47. int main(){
  48. n=read();m=read();s=read();
  49. for(int i=;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}
  50. dij(s);
  51. for(int i=;i<=n;i++) printf("%d ",d[i]);
  52. }

(3)dijkstra+配对堆 380ms 吊打用SLF优化的spfa啊啊啊啊啊 [2017-01-14]

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <ext/pb_ds/priority_queue.hpp>
  6. #define pa pair<int,int>
  7. #define mp make_pair
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10. typedef __gnu_pbds::priority_queue<pa,greater<pa>,thin > heap;
  11. const int N=1e4+,M=5e5+,INF=;
  12. inline int read(){
  13. char c=getchar();int x=,f=;
  14. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  15. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  16. return x*f;
  17. }
  18. int n,m,s,u,v,w;
  19. struct edge{
  20. int v,ne,w;
  21. }e[M];
  22. int h[N],cnt=;
  23. inline void ins(int u,int v,int w){
  24. cnt++;
  25. e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
  26. }
  27.  
  28. heap q;
  29. heap::point_iterator it[N];
  30. int d[N];
  31. void dij(int s){
  32. for(int i=;i<=n;i++) d[i]=INF;
  33. d[s]=;
  34. it[s]=q.push(mp(,s));
  35. while(!q.empty()){
  36. int u=q.top().second;q.pop();
  37. for(int i=h[u];i;i=e[i].ne){
  38. int v=e[i].v,w=e[i].w;
  39. if(d[v]>d[u]+w){
  40. d[v]=d[u]+w;
  41. if(it[v]!=) q.modify(it[v],mp(d[v],v));
  42. else it[v]=q.push(mp(d[v],v));
  43. }
  44. }
  45. }
  46. }
  47. int main(){
  48. n=read();m=read();s=read();
  49. for(int i=;i<=m;i++){u=read();v=read();w=read();ins(u,v,w);}
  50. dij(s);
  51. for(int i=;i<=n;i++) printf("%d ",d[i]);
  52. }

2.判负环

Vijos P1053Easy sssp

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=1e3+,M=1e5+,INF=1e9+;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. int n,m,s,u,v,w;
  14. struct edge{
  15. int v,ne,w;
  16. }e[M+N];
  17. int h[N],cnt=;
  18. inline void ins(int u,int v,int w){
  19. cnt++;
  20. e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
  21. }
  22. inline void lop(int &x){x++;if(x==N) x=;}
  23. int q[N],head=,tail=,inq[N];
  24. int d[N],nc[N];
  25. bool spfa(int s){
  26. head=tail=;
  27. for(int i=;i<=n;i++) d[i]=INF,inq[i]=nc[i]=;
  28. q[tail]=s;inq[s]=nc[s]=; lop(tail);
  29. d[s]=;
  30. while(head!=tail){
  31. int u=q[head];inq[u]=; lop(head);
  32. for(int i=h[u];i;i=e[i].ne){
  33. int v=e[i].v,w=e[i].w;
  34. if(d[v]>d[u]+w){
  35. d[v]=d[u]+w;
  36. if(!inq[v]){
  37. inq[v]=;q[tail]=v; lop(tail);
  38. if(++nc[v]>n) return false;
  39. }
  40. }
  41. }
  42. }
  43. return true;
  44. }
  45. int main(){
  46. n=read();m=read();s=read();
  47. for(int i=;i<=m;i++){
  48. u=read();v=read();w=read();
  49. if(u==v&&w<) {printf("-1");return ;}
  50. if(u!=v)ins(u,v,w);
  51. }
  52.  
  53. int ss=n+;//超级源
  54. for(int i=;i<=n;i++) ins(ss,i,);
  55. int flag=spfa(ss);
  56. if(!flag){printf("-1");return ;}
  57. spfa(s);
  58. for(int i=;i<=n;i++){
  59. if(d[i]>=INF) printf("NoPath\n");
  60. else printf("%d\n",d[i]);
  61. }
  62. }

3.最小生成树

洛谷P3366

kruskal

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=,M=2e5+,INF=1e9+;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. int n,m,u,v,w;
  14. int cnt=;
  15. struct edge{
  16. int u,v,w;
  17. bool operator <(const edge &r)const{return w<r.w;}
  18. }e[M];
  19. int fa[N];
  20. inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
  21. int kruskal(){
  22. int ans=,cnt=;
  23. for(int i=;i<=n;i++) fa[i]=i;
  24. sort(e+,e++m);
  25. for(int i=;i<=m;i++){
  26. int u=e[i].u,v=e[i].v,w=e[i].w;
  27. int f1=find(u),f2=find(v);
  28. if(f1!=f2){
  29. ans+=w;
  30. fa[f1]=f2;
  31. cnt++;
  32. if(cnt==n-) break;
  33. }
  34. }
  35. return ans;
  36. }
  37. int main(){
  38. n=read();m=read();
  39. for(int i=;i<=m;i++){
  40. e[i].u=read();e[i].v=read();e[i].w=read();
  41. }
  42. int ans=kruskal();
  43. printf("%d",ans);
  44. }

4.floyd

(1)传递闭包

d[i][j]=d[i][j]||(d[i][k]&&d[k][j])

(2)最小环

Vijos P1046观光旅行

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=,M=1e4+,INF=1e8+;//1E9+1E9+1E9溢出
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. int n,m,u,v,w,g[N][N];
  14. int d[N][N],ans=INF;
  15. void floyd(){
  16. ans=INF;
  17. for(int k=;k<=n;k++){
  18. for(int i=;i<=k-;i++)
  19. for(int j=i+;j<=k-;j++)
  20. ans=min(ans,g[i][k]+g[k][j]+d[i][j]);
  21. for(int i=;i<=n;i++)
  22. for(int j=;j<=n;j++)
  23. d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
  24. }
  25.  
  26. }
  27. int main(){
  28. while(scanf("%d%d",&n,&m)!=EOF){
  29. for(int i=;i<=n;i++) for(int j=i+;j<=n;j++) d[i][j]=d[j][i]=g[i][j]=g[j][i]=INF;
  30. for(int i=;i<=m;i++){
  31. u=read();v=read();w=read();
  32. d[u][v]=d[v][u]=g[u][v]=g[v][u]=w;
  33. }
  34. floyd();
  35. if(ans==INF) puts("No solution.");
  36. else printf("%d\n",ans);
  37. }
  38. }

5.割点

洛谷P3388

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=1e5+,M=1e5+,INF=1e9+;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x;
  12. }
  13. int n=,m,u,v;
  14. struct edge{
  15. int v,ne;
  16. }e[M<<];
  17. int h[N],cnt=;
  18. inline void ins(int u,int v){
  19. cnt++;
  20. e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
  21. cnt++;
  22. e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
  23. }
  24. int dfn[N],low[N],dfc=,iscut[N];
  25. void dfs(int u,int fa){
  26. dfn[u]=low[u]=++dfc;
  27. int child=;
  28. for(int i=h[u];i;i=e[i].ne){
  29. int v=e[i].v;
  30. if(!dfn[v]){
  31. child++;
  32. dfs(v,u);
  33. low[u]=min(low[u],low[v]);
  34. if(low[v]>=dfn[u]) iscut[u]=;
  35. }else if(v!=fa) low[u]=min(low[u],dfn[v]);
  36. }
  37. if(fa==&&child==) iscut[u]=;
  38. }
  39. int main(){
  40. n=read();m=read();
  41. for(int i=;i<=m;i++){u=read();v=read();ins(u,v);}
  42. for(int i=;i<=n;i++) if(!dfn[i]) dfs(i,);
  43.  
  44. int ans=;
  45. for(int i=;i<=n;i++) if(iscut[i]) ans++;
  46. printf("%d\n",ans);
  47. for(int i=;i<=n;i++) if(iscut[i]) printf("%d ",i);
  48. }

6.tarjan 强连通分量

POJ2186

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. const int N=1e4+,M=5e4+;
  8. typedef long long ll;
  9. inline int read(){
  10. char c=getchar();int x=,f=;
  11. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  12. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  13. return x*f;
  14. }
  15. int n,m,u,v;
  16. struct edge{
  17. int v,ne;
  18. }e[M];
  19. int h[N],cnt=;
  20. inline void ins(int u,int v){
  21. cnt++;
  22. e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
  23. }
  24. int dfn[N],belong[N],low[N],dfc,scc,st[N],top;
  25. int size[N];
  26. void dfs(int u){
  27. dfn[u]=low[u]=++dfc;
  28. st[++top]=u;
  29. for(int i=h[u];i;i=e[i].ne){
  30. int v=e[i].v;
  31. if(!dfn[v]){
  32. dfs(v);
  33. low[u]=min(low[u],low[v]);
  34. }else if(!belong[v])
  35. low[u]=min(low[u],dfn[v]);
  36. }
  37. if(low[u]==dfn[u]){
  38. scc++;
  39. while(true){
  40. int x=st[top--];
  41. belong[x]=scc;
  42. size[scc]++;
  43. if(x==u) break;
  44. }
  45. }
  46. }
  47. int outd[N],ind[N],ans;
  48. void point(){
  49. for(int u=;u<=n;u++)
  50. for(int i=h[u];i;i=e[i].ne){
  51. int v=e[i].v;
  52. if(belong[u]!=belong[v]) outd[belong[u]]++,ind[belong[v]]++;
  53. }
  54. }
  55. int main(){
  56. n=read();m=read();
  57. for(int i=;i<=m;i++){u=read();v=read();ins(u,v);}
  58. for(int i=;i<=n;i++) if(!dfn[i]) dfs(i);
  59. point();
  60. for(int i=;i<=scc;i++){
  61. if(outd[i]==){
  62. if(ans){ans=;break;}
  63. else ans=size[i];
  64. }
  65. }
  66. printf("%d",ans);
  67. }

7.二分图染色

  1. bool color(int u,int c){
  2. col[u]=c;
  3. for(int i=h[u];i;i=e[i].ne){
  4. int v=e[i].v;
  5. if(col[u]==col[v]) return false;
  6. if(!col[v]&&!color(v,-c)) return false;
  7. }
  8. return true;
  9. }

8.二分图最大匹配

洛谷P3386

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=;
  7. inline int read(){
  8. char c=getchar();int x=,f=;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  11. return x*f;
  12. }
  13. int n,m,s,u,v;
  14. struct edge{
  15. int v,ne;
  16. }e[N*N<<];
  17. int h[N],cnt=;
  18. inline void ins(int u,int v){
  19. cnt++;
  20. e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
  21. }
  22. int vis[N],le[N];
  23. bool find(int u){
  24. for(int i=h[u];i;i=e[i].ne){
  25. int v=e[i].v;
  26. if(!vis[v]){
  27. vis[v]=;
  28. if(!le[v]||find(le[v])){
  29. le[v]=u;
  30. return true;
  31. }
  32. }
  33. }
  34. return false;
  35. }
  36. int ans=;
  37. void hungary(){
  38. for(int i=;i<=n;i++){
  39. memset(vis,,sizeof(vis));
  40. if(find(i)) ans++;
  41. }
  42. }
  43. int main(){
  44. n=read();m=read();int t=read();
  45. for(int i=;i<=t;i++){u=read();v=read();if(v>m)continue;ins(u,v);}
  46. ans=;
  47. hungary();
  48. printf("%d\n",ans);
  49. }

数据结构

1.st表

  1. int a[N],f[N][];
  2.  
  3. void init(int n){
  4. for(int i=;i<=n;i++) f[i][]=a[i];
  5.  
  6. for(int j=;j<=;j++)
  7. for(int i=;i+(<<j)-<=n;i++)
  8. f[i][j]=min(f[i][j-],f[i+(<<(j-))][j-]);
  9. }
  10.  
  11. int RMQ(int l,int r){
  12. int k=log(r-l+)/log(); //2^k<=l~r
  13. return min(f[l][k],f[r-(<<k)+][k]);
  14. }

2.trie树

  1. int ch[N*L][],size=,val[N*L];
  2. void insert(char s[],int n,int id){
  3. int u=;
  4. for(int i=;i<=n;i++){
  5. int v=s[i]-'a';
  6. if(!ch[u][v]) ch[u][v]=++size;
  7. u=ch[u][v];
  8. }
  9. val[u]=id;//printf("ins %d %d\n",u,id);
  10. }

3.单调栈

求最大全flag子矩阵

  1. void sol(int flag){
  2. memset(tot,,sizeof(tot));
  3. for(int i=;i<=n;i++){
  4. top=;
  5. for(int j=;j<=m;j++){
  6. if(a[i][j]==flag) tot[j]++;
  7. else tot[j]=;
  8. data t;
  9. t.h=tot[j];t.l=;t.pos=j;
  10. while(top&&st[top].h>=t.h){
  11. int l=st[top].l+j--st[top].pos,h=st[top].h;
  12. ans1=max(ans1,min(l,h)*min(l,h));
  13. ans2=max(ans2,l*h);
  14. t.l+=st[top].l;
  15. top--;
  16. }
  17. st[++top]=t;
  18. }
  19. while(top){
  20. int l=st[top].l+m-st[top].pos,h=st[top].h;
  21. ans1=max(ans1,min(l,h)*min(l,h));
  22. ans2=max(ans2,l*h);
  23. top--;
  24. }
  25. }
  26. }

4.单调队列

q[]保存的是下标

  1. 删除
  2. while(head<=tail&&q[head]<=i-k) head++; //也可能<
  1. 插入
  2. while(head<=tail&&a[q[tail]]>a[i]) tail--;//单增
  3. q[++tail]=i;

5.并查集

带权

  1. for(int i=;i<=n;i++) fa[i]=i,d[i]=,s[i]=;
  2.  
  3. int fa[N],d[N],s[N];
  4. inline int find(int x){
  5. if(x==fa[x]) return x;
  6. int root=find(fa[x]);
  7. d[x]+=d[fa[x]];
  8. return fa[x]=root;
  9. }

6.树状数组

7.线段树

NOIP模板整理计划的更多相关文章

  1. [转]开源中国的 IT 公司开源软件整理计划介绍

    [转]开源中国的 IT 公司开源软件整理计划介绍 http://www.oschina.net/news/61534/oschina-opensource-collection-plan-for-it ...

  2. 4632 NOIP[2015] 运输计划

    4632 NOIP[2015] 运输计划  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解       题目描述 Description 公元 2044 ...

  3. [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

  4. Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分)

    Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之 ...

  5. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  6. NOIP模板总结

    NOIP模板总结 进考场先打一份缺省源: # include <cstdio> # include <iostream> # include <cstring> # ...

  7. wawawa8的模板复习计划

    wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...

  8. 字符串系列——KMP模板整理

    KMP模板整理 KMP与扩展KMP: /*vs 2017/ vs code以外编译器,去掉windows.h头文件和system("pause");*/ #include<i ...

  9. 开源中国的 IT 公司开源软件整理计划介绍

    直击现场 <HTML开发MacOSApp教程>  http://pan.baidu.com/s/1jG1Q58M 开源中国的 IT 公司开源软件整理计划介绍 oschina 发布于: 20 ...

随机推荐

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  3. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  4. SSH实战 · 唯唯乐购项目(下)

    后台模块 一:后台用户模块 引入后台管理页面 创建adminuser表: CREATE TABLE `adminuser` (   `uid` int(11) NOT NULL AUTO_INCREM ...

  5. ABP文档 - 异常处理

    文档目录 本节内容: 简介 启用错误处理 非AJAX请求 显示异常 UserFriendlyException Error 模型 AJAX 请求 异常事件 简介 这个文档针对Asp.net Mvc和W ...

  6. 再谈CAAnimation动画

    CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: ...

  7. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  8. 参考bootstrap中的popover.js的css画消息弹框

    前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...

  9. 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  10. Solr 排除查询

    前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...