应该不会被禁赛吧qwq

Day1

T1 铺设道路

€€£:我 抄 我 自 己

我考场上写的是一个类似于差分的做法,就是开个数组表示某个位置是否贡献答案,从小到大枚举高度,那么一个位置能贡献答案当且仅当这个位置没有被当前高度盖过去,并且上一个位置被当前高度盖过去了,如果某一时刻某个位置被当前高度盖过去了,那么如果这个位置有贡献,就要把这个位置贡献的扣掉,同时看一下能否使后一个位置产生贡献

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<queue>
  8. #include<map>
  9. #define il inline
  10. #define db double
  11. #define LL long long
  12. using namespace std;
  13. const int N=100000+10;
  14. il LL rd()
  15. {
  16. LL x=0,w=1;char ch=0;
  17. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  18. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  19. return x*w;
  20. }
  21. struct node
  22. {
  23. int x,d;
  24. node(){}
  25. node(int nx,int nd){x=nx,d=nd;}
  26. bool operator < (const node &bb) const {return d<bb.d;}
  27. }b[N];
  28. int n,a[N];
  29. LL ans;
  30. int s[N],nw;
  31. int main()
  32. {
  33. //freopen("road.in","r",stdin);
  34. //freopen("road.out","w",stdout);
  35. n=rd();
  36. for(int i=1;i<=n;i++) a[i]=rd(),b[i]=node(i,a[i]);
  37. a[0]=a[n+1]=-1,b[0]=node(0,-1);
  38. sort(b,b+n+1);
  39. b[n+1].d=2333333;
  40. s[1]=nw=1;
  41. for(int h=0,i=1;h<=10000;h++)
  42. {
  43. if(!nw) break;
  44. if(h) ans+=nw;
  45. while(b[i].d==h)
  46. {
  47. int x=b[i].x;
  48. if(s[x]) --s[x],--nw;
  49. if(a[x+1]>h) ++s[x+1],++nw;
  50. ++i;
  51. //printf("%d %d\n",h,nw);
  52. }
  53. }
  54. printf("%lld\n",ans);
  55. return 0;
  56. }

T2 货币系统

这题的答案就是所有不能被其他数加起来表示的数的个数.原因是首先最小的那个数要选,然后这个数的倍数就可以删掉不选了.接下来没被删掉的数中最小的数也要选,同样可以把其他能被加起来表示的数删掉,,,以此类推.所以这题就是个完全背包,只需要知道给出的数中的每个数是否只有一种表示方法就好了

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<queue>
  8. #include<map>
  9. #define il inline
  10. #define db double
  11. #define LL long long
  12. using namespace std;
  13. const int N=100+10,M=25000+10;
  14. il LL rd()
  15. {
  16. LL x=0,w=1;char ch=0;
  17. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  18. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  19. return x*w;
  20. }
  21. int n,m,a[N],f[M];
  22. int main()
  23. {
  24. //freopen("money.in","r",stdin);
  25. //freopen("money.out","w",stdout);
  26. int T=rd();
  27. while(T--)
  28. {
  29. memset(f,0,sizeof(f));
  30. n=rd(),m=0;
  31. for(int i=1;i<=n;i++) m=max(m,a[i]=rd());
  32. f[0]=1;
  33. for(int i=1;i<=m;i++)
  34. {
  35. for(int j=1;j<=n;j++)
  36. if(i-a[j]>=0) f[i]+=f[i-a[j]];
  37. f[i]=min(f[i],2);
  38. }
  39. int ans=0;
  40. for(int i=1;i<=n;i++) ans+=(f[a[i]]==1);
  41. printf("%d\n",ans);
  42. }
  43. return 0;
  44. }

T3 赛道修建

首先如果某个答案可行,那么比这个答案更小的也可行,所以可以二分答案.check的话就需要找出\(m\)条长度\(\ge mid\)的链.可以对整棵树进行Dfs.每个点的儿子都有往下的链,我们就把这些链取出来统计一下,方法是用当前最短的链匹配加起来长度\(\ge mid\)的,同时尽量小的链,然后计入链的个数,或者是本来长度就合法的可以直接计入链的个数,最后没匹配上的不能计入答案的就放到父亲处匹配

实现可以sort之后使用二分+并查集,我比较懒就用了\(multiset\) 依旧能艹过去

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<queue>
  8. #include<map>
  9. #include<set>
  10. #define il inline
  11. #define db double
  12. #define LL long long
  13. #define re register
  14. using namespace std;
  15. const int N=50000+10;
  16. il LL rd()
  17. {
  18. LL x=0,w=1;char ch=0;
  19. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  20. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  21. return x*w;#
  22. }
  23. int to[N<<1],nt[N<<1],w[N<<1],hd[N],tot=1;
  24. il void add(int x,int y,int z)
  25. {
  26. ++tot,to[tot]=y,nt[tot]=hd[x],w[tot]=z,hd[x]=tot;
  27. ++tot,to[tot]=x,nt[tot]=hd[y],w[tot]=z,hd[y]=tot;
  28. }
  29. int n,m,an,mid;
  30. int f[N],tp;
  31. multiset<int> s;
  32. multiset<int>::iterator it,rbq;
  33. void dfs(int x,int ffa)
  34. {
  35. f[x]=0;
  36. for(int i=hd[x];i;i=nt[i])
  37. {
  38. int y=to[i];
  39. if(y==ffa) continue;
  40. dfs(y,x);
  41. }
  42. s.clear(),tp=0;
  43. for(int i=hd[x];i;i=nt[i])
  44. {
  45. int y=to[i];
  46. if(y==ffa) continue;
  47. s.insert(f[y]+w[i]);
  48. ++tp;
  49. }
  50. it=s.begin();
  51. for(int i=2;i<=tp;i++) ++it;
  52. while(tp&&(int)(*it)>=mid)
  53. {
  54. rbq=it;
  55. ++an;
  56. --it,--tp;
  57. s.erase(rbq);
  58. }
  59. int ma=*it;
  60. it=s.begin();
  61. while(tp>1&&(int)(*it)+ma<mid) f[x]=max(f[x],(int)(*it)),--tp,rbq=it,++it,s.erase(rbq);
  62. //printf("--%d\n",tp);
  63. //it=s.begin();
  64. while(tp>1)
  65. {
  66. rbq=s.lower_bound(mid-(*it));
  67. if(rbq==s.end()) f[x]=max(f[x],(int)(*it)),--tp,rbq=it,++it,s.erase(rbq);
  68. else
  69. {
  70. ++an;
  71. if(rbq==it) ++rbq;
  72. --tp,s.erase(rbq);
  73. //printf("%d\n",(int)(*rbq));
  74. --tp,rbq=it,++it,s.erase(rbq);
  75. //printf("qqc\n");
  76. }
  77. }
  78. if(tp) f[x]=max(f[x],*s.begin());
  79. //printf("%d %d\n",x,f[x]);
  80. }
  81. il bool check()
  82. {
  83. an=0;
  84. dfs(1,0);
  85. return an>=m;
  86. }
  87. int zz=0,de[N];
  88. void dd(int x,int ffa)
  89. {
  90. for(int i=hd[x];i;i=nt[i])
  91. {
  92. int y=to[i];
  93. if(y==ffa) continue;
  94. de[y]=de[x]+w[i],dd(y,x);
  95. }
  96. if(de[x]>de[zz]) zz=x;
  97. }
  98. int main()
  99. {
  100. //freopen("track.in","r",stdin);
  101. //freopen("track.out","w",stdout);
  102. n=rd(),m=rd();
  103. int l=0,r=0;
  104. for(re int i=1;i<n;++i)
  105. {
  106. int x=rd(),y=rd(),z=rd();
  107. add(x,y,z);
  108. }
  109. de[0]=-1,de[1]=0,dd(1,0);
  110. de[r=zz]=0,zz=0,dd(r,0),r=de[zz];
  111. int ans=0;
  112. while(l<=r)
  113. {
  114. mid=(l+r)>>1;
  115. if(check()) ans=mid,l=mid+1;
  116. else r=mid-1;
  117. }
  118. printf("%d\n",ans);
  119. return 0;
  120. }

Day2

T1 旅行

首先如果是棵树,那么从1开始,贪心从小往大遍历所有儿子,答案就是按从前往后遍历到的点的序列.如果是基环树,那么枚举环上的边,断掉,然后当成树做,最后取字典序最小的答案就好了

结果做这个##题花我1.5h qwq

不过这题有线性做法,自己可以去找 懒

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<queue>
  8. #include<map>
  9. #define il inline
  10. #define LL long long
  11. #define db double
  12. #define re register
  13. using namespace std;
  14. const int N=5000+10;
  15. il LL rd()
  16. {
  17. LL x=0,w=1;char ch=0;
  18. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  19. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  20. return x*w;
  21. }
  22. int to[N<<1],nt[N<<1],hd[N],tot=1;
  23. il void add(int x,int y)
  24. {
  25. ++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;
  26. ++tot,to[tot]=x,nt[tot]=hd[y],hd[y]=tot;
  27. }
  28. struct edgee
  29. {
  30. int x,y;
  31. edgee(){}
  32. edgee(int nx,int ny){x=nx,y=ny;if(x>y) swap(x,y);}
  33. bool operator < (const edgee &bb) const {return x!=bb.x?x>bb.x:y>bb.y;}
  34. }e[N];
  35. int n,m,an[N],ans[N],tt;
  36. int st[N],s2[N],tp,se[N],te,zhushu;
  37. bool ban[N<<1],v[N];
  38. void dfs(int x)
  39. {
  40. v[x]=true,st[++tp]=x;
  41. for(int i=hd[x];i;i=nt[i])
  42. {
  43. if(ban[i]) continue;
  44. s2[tp]=i;
  45. ban[i]=ban[i^1]=true;
  46. if(v[to[i]])
  47. {
  48. int ttp=tp;
  49. while(ttp)
  50. {
  51. int y=st[ttp],ii=s2[ttp--];
  52. se[++te]=ii;
  53. if(to[i]==y) break;
  54. }
  55. zhushu=i;
  56. continue;
  57. }
  58. else dfs(to[i]);
  59. ban[i]=ban[i^1]=false;
  60. }
  61. st[tp]=s2[tp]=0,--tp;
  62. }
  63. void dd(int x)
  64. {
  65. an[++tt]=x;
  66. for(int i=hd[x];i;i=nt[i])
  67. {
  68. if(ban[i]) continue;
  69. ban[i]=ban[i^1]=true;
  70. dd(to[i]);
  71. ban[i]=ban[i^1]=false;
  72. }
  73. }
  74. int main()
  75. {
  76. //freopen("travel.in","r",stdin);
  77. //freopen("travel.out","w",stdout);
  78. n=rd(),m=rd();
  79. for(int i=1;i<=m;i++) e[i]=edgee(rd(),rd());
  80. sort(e+1,e+m+1);
  81. for(int i=1;i<=m;i++) add(e[i].x,e[i].y);
  82. if(m==n-1)
  83. {
  84. dd(1);
  85. for(int i=1;i<=n;i++) printf("%d ",an[i]);
  86. }
  87. else
  88. {
  89. dfs(1);
  90. ban[zhushu]=ban[zhushu^1]=false;
  91. memset(ans,63,sizeof(ans));
  92. while(te)
  93. {
  94. int i=se[te--];
  95. ban[i]=ban[i^1]=true;
  96. tt=0,dd(1);
  97. for(int j=1;j<=n;j++)
  98. {
  99. if(an[j]>ans[j]) break;
  100. else if(an[j]<ans[j])
  101. {
  102. for(int k=1;k<=n;k++) ans[k]=an[k];
  103. break;
  104. }
  105. }
  106. ban[i]=ban[i^1]=false;
  107. }
  108. for(int i=1;i<=n;i++) printf("%d ",ans[i]);
  109. }
  110. return 0;
  111. }

T2 填数游戏

骗分过样例,暴力出奇迹

下面是考场10'代码

  1. ......
  2. int n,m,ans;
  3. int a[5][5],tt;
  4. string s[20];
  5. void dd(int x,int y,string nw)
  6. {
  7. if(x==n&&y==m) {s[++tt]=nw;return;}
  8. if(x!=n) dd(x+1,y,nw+(char)(48+a[x+1][y]));
  9. }
  10. il bool check()
  11. {
  12. tt=0;
  13. //没写完好气哦
  14. }
  15. void dfs(int x,int y)
  16. {
  17. if(x>n) {ans+=check();return;}
  18. a[x][y]=0,dfs(y==m?x+1:x,y==m?1:y+1);
  19. a[x][y]=1,dfs(y==m?x+1:x,y==m?1:y+1);
  20. }
  21. int main()
  22. {
  23. //freopen("game.in","r",stdin);
  24. //freopen("game.out","w",stdout);
  25. n=rd(),m=rd();
  26. /*......*/
  27. if(n==2&&m==2) printf("12");
  28. if(n==3&&m==3) printf("112");
  29. return 0;
  30. }

这题的打表题解自己去网上找qwq 懒

下面是靠谱的数学做法

咕咕咕咕咕咕咕

T3 保卫王国

不会打暴力,身败名裂

做法之一是动态dp,这里不做过多赘述

还有可以直接倍增做,也就是需要知道某个点子树内的dp值,子树以外的dp值(也可以说是以这个点为整棵树的根的dp值),以及一个点的\(2^k\)次方级祖先到这个点父亲所构成的链以及链旁边的部分的dp值,每次询问分类讨论一下就好了 就4.7kb,太好写了

有两种情况,如果某个点是lca,那么答案由下面那个点的子树+两点之间的链(这里的链均不包含端点)+lca扣除下面那个点所在子树的贡献的dp值构成;否则就是由两个点的子树+两点分别到lca之间的链+lca扣除两个点所在子树的贡献的dp值构成

注意无解的判断,两个询问点相邻,且都为0

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<queue>
  8. #include<map>
  9. #define il inline
  10. #define LL long long
  11. #define db double
  12. #define re register
  13. using namespace std;
  14. const int N=100000+10;
  15. il LL rd()
  16. {
  17. LL x=0,w=1;char ch=0;
  18. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  19. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  20. return x*w;
  21. }
  22. int to[N<<1],nt[N<<1],hd[N],tot=1;
  23. il void add(int x,int y)
  24. {
  25. ++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;
  26. ++tot,to[tot]=x,nt[tot]=hd[y],hd[y]=tot;
  27. }
  28. int n,nn,m,p[N],fa[N][20],sz[N],de[N],son[N],top[N];
  29. LL f[N][2],f0[N],f1[N],g[N][2],h[N][20][2][2],a1[2][2],a2[2][2],ff[2];
  30. void dfs1(int x)
  31. {
  32. sz[x]=1;
  33. for(int i=1;i<=nn;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
  34. for(int i=hd[x];i;i=nt[i])
  35. {
  36. int y=to[i];
  37. if(y==fa[x][0]) continue;
  38. fa[y][0]=x,de[y]=de[x]+1,dfs1(y),sz[x]+=sz[y];
  39. if(sz[y]>sz[son[x]]) son[x]=y;
  40. f[x][0]+=f[y][1],f[x][1]+=min(f[y][0],f[y][1]);
  41. }
  42. f[x][1]+=p[x];
  43. for(int i=hd[x];i;i=nt[i])
  44. {
  45. int y=to[i];
  46. if(y==fa[x][0]) continue;
  47. f0[y]=f[x][0]-f[y][1],f1[y]=f[x][1]-min(f[y][0],f[y][1]);
  48. }
  49. }
  50. void dfs2(int x,int ntp)
  51. {
  52. top[x]=ntp;
  53. if(x>1) g[x][0]=g[fa[x][0]][1]+f1[x],g[x][1]=min(g[fa[x][0]][0]+f0[x],g[fa[x][0]][1]+f1[x]);
  54. h[x][0][0][0]=f[fa[x][0]][0]-f[x][1],h[x][0][1][1]=f[fa[x][0]][1]-min(f[x][0],f[x][1]),h[x][0][0][1]=h[x][0][1][0]=1ll<<50;
  55. for(int i=1;i<=nn;i++)
  56. {
  57. for(int j=0;j<=1;j++)
  58. for(int k=0;k<=1;k++)
  59. {
  60. h[x][i][j][k]=1ll<<50;
  61. for(int l=0;l<=1;l++)
  62. for(int o=0;o<=1;o++)
  63. if(o|l) h[x][i][j][k]=min(h[x][i][j][k],h[x][i-1][j][l]+h[fa[x][i-1]][i-1][o][k]);
  64. }
  65. }
  66. if(son[x])
  67. {
  68. dfs2(son[x],ntp);
  69. }
  70. for(int i=hd[x];i;i=nt[i])
  71. {
  72. int y=to[i];
  73. if(y==fa[x][0]||y==son[x]) continue;
  74. dfs2(y,y);
  75. }
  76. }
  77. il int getlca(int x,int y)
  78. {
  79. while(top[x]!=top[y])
  80. {
  81. if(de[top[x]]<de[top[y]]) swap(x,y);
  82. x=fa[top[x]][0];
  83. }
  84. return de[x]<de[y]?x:y;
  85. }
  86. int main()
  87. {
  88. //freopen("defense.in","r",stdin);
  89. //freopen("defense.out","w",stdout);
  90. n=rd(),m=rd();
  91. nn=log2(n);
  92. char cc[3];
  93. scanf("%s",cc);
  94. for(int i=1;i<=n;i++) p[i]=rd();
  95. for(int i=1;i<n;i++) add(rd(),rd());
  96. dfs1(1),dfs2(1,1);
  97. while(m--)
  98. {
  99. a1[0][0]=a1[0][1]=a1[1][0]=a1[1][1]=0;
  100. a2[0][0]=a2[0][1]=a2[1][0]=a2[1][1]=0;
  101. int x=rd(),a=rd(),y=rd(),b=rd(),lca=getlca(x,y);
  102. if(y==lca) swap(x,y),swap(a,b);
  103. if(x==lca)
  104. {
  105. if(fa[y][0]==x&&!(a|b)) {puts("-1");continue;}
  106. int yy=y;
  107. for(int i=nn;i>=0;i--)
  108. if(de[fa[yy][i]]>=de[x]+1)
  109. {
  110. if(a1[0][0])
  111. {
  112. LL nw[2][2];
  113. nw[0][0]=nw[0][1]=nw[1][0]=nw[1][1]=1ll<<50;
  114. for(int j=0;j<=1;j++)
  115. for(int k=0;k<=1;k++)
  116. for(int l=0;l<=1;l++)
  117. for(int o=0;o<=1;o++)
  118. if(l|o) nw[j][k]=min(nw[j][k],a1[j][l]+h[yy][i][o][k]);
  119. for(int j=0;j<=1;j++)
  120. for(int k=0;k<=1;k++)
  121. a1[j][k]=nw[j][k];
  122. }
  123. else
  124. {
  125. for(int j=0;j<=1;j++)
  126. for(int k=0;k<=1;k++)
  127. a1[j][k]=h[yy][i][j][k];
  128. }
  129. yy=fa[yy][i];
  130. }
  131. ff[0]=f[x][0]+g[x][0]-f[yy][1],ff[1]=f[x][1]+g[x][1]-min(f[yy][0],f[yy][1]);
  132. LL ans=1ll<<50;
  133. for(int j=0;j<=1;j++)
  134. for(int k=0;k<=1;k++)
  135. if((b|j)&(a|k)) ans=min(ans,ff[a]+f[y][b]+a1[j][k]);
  136. printf("%lld\n",ans<(1ll<<50)?ans:-1);
  137. }
  138. else
  139. {
  140. int xx=x,yy=y;
  141. for(int i=nn;i>=0;i--)
  142. if(de[fa[xx][i]]>=de[lca]+1)
  143. {
  144. if(a1[0][0])
  145. {
  146. LL nw[2][2];
  147. nw[0][0]=nw[0][1]=nw[1][0]=nw[1][1]=1ll<<50;
  148. for(int j=0;j<=1;j++)
  149. for(int k=0;k<=1;k++)
  150. for(int l=0;l<=1;l++)
  151. for(int o=0;o<=1;o++)
  152. if(l|o) nw[j][k]=min(nw[j][k],a1[j][l]+h[xx][i][o][k]);
  153. for(int j=0;j<=1;j++)
  154. for(int k=0;k<=1;k++)
  155. a1[j][k]=nw[j][k];
  156. }
  157. else
  158. {
  159. for(int j=0;j<=1;j++)
  160. for(int k=0;k<=1;k++)
  161. a1[j][k]=h[xx][i][j][k];
  162. }
  163. xx=fa[xx][i];
  164. }
  165. for(int i=nn;i>=0;i--)
  166. if(de[fa[yy][i]]>=de[lca]+1)
  167. {
  168. if(a2[0][0])
  169. {
  170. LL nw[2][2];
  171. nw[0][0]=nw[0][1]=nw[1][0]=nw[1][1]=1ll<<50;
  172. for(int j=0;j<=1;j++)
  173. for(int k=0;k<=1;k++)
  174. for(int l=0;l<=1;l++)
  175. for(int o=0;o<=1;o++)
  176. if(l|o) nw[j][k]=min(nw[j][k],a2[j][l]+h[yy][i][o][k]);
  177. for(int j=0;j<=1;j++)
  178. for(int k=0;k<=1;k++)
  179. a2[j][k]=nw[j][k];
  180. }
  181. else
  182. {
  183. for(int j=0;j<=1;j++)
  184. for(int k=0;k<=1;k++)
  185. a2[j][k]=h[yy][i][j][k];
  186. }
  187. yy=fa[yy][i];
  188. }
  189. ff[0]=f[lca][0]+g[lca][0]-f[xx][1]-f[yy][1],ff[1]=f[lca][1]+g[lca][1]-min(f[xx][0],f[xx][1])-min(f[yy][0],f[yy][1]);
  190. LL ans=1ll<<50;
  191. for(int j=0;j<=1;j++)
  192. for(int k=0;k<=1;k++)
  193. for(int l=0;l<=1;l++)
  194. for(int o=0;o<=1;o++)
  195. for(int p=0;p<=1;p++)
  196. if((x!=xx?(a|j)&&(l|p):(a|p))&(y!=yy?(b|k)&&(o|p):(b|p))) ans=min(ans,f[x][a]+f[y][b]+a1[j][l]+a2[k][o]+ff[p]);
  197. printf("%lld\n",ans<(1ll<<50)?ans:-1);
  198. }
  199. }
  200. return 0;
  201. }

NOIP2018TG题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 简介浏览器内核与JavaScript引擎

    本文介绍了常用浏览器内核与JavaScript引擎 一.浏览器内核 Rending Engine, 顾名思义,称之为渲染网页内容的,将网页的代码转换为你看得见的页面,因为是排版,所以排版,所以肯定会有 ...

  2. 英国电信反悔华为是唯一真正的5G供应商

    导读 英国电信反悔华为是唯一真正的5G供应商 英国电信的一位发言人表示,该公司目前正「从我们自 2006 年以来实施的网络架构原则中,从我们的 3G 和 4G 网络核心提取华为设备」. 英国电信已经不 ...

  3. python文件逐行读取四种方法

    下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修改即可. 方法一:readline函 ...

  4. Directory操作

    操作文件夹 CreateDirectory() 创建新文件夹 Delete() 删除 Move() 剪切 Exists() 判断文件夹是否存在 //获取当前目录下所有文件夹的路径 Directory. ...

  5. Java 入门进阶

    Java 入门进阶 發表於 2015-04-16 http://xielong.me/2015/04/16/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B7%A5%E7%A8%8B% ...

  6. 【BZOJ2159】Crash的文明世界(第二类斯特林数,动态规划)

    [BZOJ2159]Crash的文明世界(第二类斯特林数,动态规划) 题面 BZOJ 洛谷 题解 看到\(k\)次方的式子就可以往二项式的展开上面考,但是显然这样子的复杂度会有一个\(O(k^2)\) ...

  7. 【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)

    [BZOJ1998][HNOI2010]物品调度(并查集,模拟) 题面 BZOJ,为啥这题都是权限题啊? 洛谷 题解 先不管\(0\)位置是个空,把它也看成一个箱子.那么最终的答案显然和置换循环节的个 ...

  8. 51nod 1462 树据结构 | 树链剖分 矩阵乘法

    题目链接 51nod 1462 题目描述 给一颗以1为根的树. 每个点有两个权值:vi, ti,一开始全部是零. Q次操作: 读入o, u, d o = 1 对u到根上所有点的vi += d o = ...

  9. 洛谷 P4097 [HEOI2013]Segment 解题报告

    P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...

  10. sliding menu

    http://www.androiduipatterns.com/2012/06/emerging-ui-pattern-side-navigation.htmlhttps://github.com/ ...