POI2013题解

只做了BZ上有的\(13\)道题。

就这样还扔了两道神仙构造和一道计算几何题。所以只剩下十道题了。

[BZOJ3414][Poi2013]Inspector

肯定是先二分答案,然后每个人的出现区间至少要包含于他自己记录的所有时间点。如果某个人没有记录过那他的出现区间任意。

从左往右扫描,维护以下几个东西:

\(t\):目前还有多少人的区间不确定。

\(s\):当前要求选多少人。(这个是由记录者决定的)

\(cl\):有多少人的区间可以向左扩展。

\(cr\):有多少人的区间可以向右扩展。

每扫到一个位置,如果\(s>\)记录的人数则无解,否则\(s+cl+cr\)就是当前可存在于该位置上的人数,若人多了就优先减\(cr\)再减\(cl\),若人少了就从\(t\)中拿人补到\(cl\)中。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int gi(){
  5. int x=0,w=1;char ch=getchar();
  6. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  7. if (ch=='-') w=0,ch=getchar();
  8. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  9. return w?x:-x;
  10. }
  11. const int N = 1e5+5;
  12. int n,m,tim[N],peo[N],rec[N],L[N],R[N],num[N],pl[N],pr[N];
  13. bool check(int mid){
  14. for (int i=1;i<=n;++i) L[i]=N,R[i]=0;
  15. for (int i=1;i<=m;++i) num[i]=pl[i]=pr[i]=0;
  16. for (int i=1;i<=mid;++i){
  17. int t=tim[i],p=peo[i],r=rec[i];
  18. if (num[t]&&num[t]!=r) return false;
  19. num[t]=r;L[p]=min(L[p],t);R[p]=max(R[p],t);
  20. }
  21. for (int i=1;i<=n;++i) if (R[i]) ++pl[L[i]],++pr[R[i]];
  22. for (int i=1,t=n,s=0,cl=0,cr=0;i<=m;++i)
  23. if (num[i]){
  24. s+=pl[i];
  25. while (pl[i]--) cl?--cl:--t;
  26. if (s>num[i]) return false;
  27. while (s+cl+cr<num[i]) ++cl,--t;
  28. while (s+cl+cr>num[i]) cr?--cr:--cl;
  29. s-=pr[i];cr+=pr[i];
  30. if (t<0) return false;
  31. }
  32. return true;
  33. }
  34. int main(){
  35. int Case=gi();while (Case--){
  36. n=gi();m=gi();
  37. for (int i=1;i<=m;++i) tim[i]=gi(),peo[i]=gi(),rec[i]=gi()+1;
  38. int l=0,r=m,res=0;
  39. while (l<=r){
  40. int mid=l+r>>1;
  41. if (check(mid)) res=mid,l=mid+1;
  42. else r=mid-1;
  43. }
  44. printf("%d\n",res);
  45. }
  46. return 0;
  47. }

[BZOJ3415][Poi2013]Price List

可知有且仅有三种策略:

1、只走\(a\)边,可以当做\(b\)边不存在。

2、把两条\(a\)边并做一条\(b\)边走。

3、一条\(a\)边都不会走。

前两种直接在原图中\(bfs\)即可出解。

考虑第三种,如果在\(bfs\)的过程中对于每个点\(x\)枚举所有与他距离为\(2\)的点,复杂度会退化成\(O(m^2)\)。

假设我们有两个边集\(G_0,G_1\),初始时都为原图。从队列中取出一个点\(u\),先枚举其在\(G_0\)中的所有出边指向的点\(v\)并标记,再顺次枚举每个\(v\)在\(G_1\)中的出边指向的点\(w\),如果\(w\)未被标记(\(u,v,w\)三点不构成三元环)则可用\(u\)更新\(w\),更新后把\(G_1\)中\(v\to w\)的这条边删除。

在不考虑三元环的前提下,\(G_0\)每条边被访问一起,\(G_1\)每条边也被访问一次,所以复杂度线性。但是构成三元环会导致边\(v\to w\)不能删。而三元环的数量是\(O(m\sqrt m)\)的,每个三元环会给复杂度带来一个常数(会被访问\(3\)次),所以复杂度为\(O(m\sqrt m)\)。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. int gi(){
  7. int x=0,w=1;char ch=getchar();
  8. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  9. if (ch=='-') w=0,ch=getchar();
  10. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  11. return w?x:-x;
  12. }
  13. const int N = 2e5+5;
  14. struct Graph{
  15. int to[N],nxt[N],hd[N],cnt;
  16. void link(int u,int v){
  17. to[++cnt]=v;nxt[cnt]=hd[u];hd[u]=cnt;
  18. to[++cnt]=u;nxt[cnt]=hd[v];hd[v]=cnt;
  19. }
  20. }G,F;
  21. int n,m,S,A,B,dep[N],vis[N],ans[N];queue<int>Q;
  22. int main(){
  23. n=gi();m=gi();S=gi();A=gi();B=gi();
  24. for (int i=1;i<=m;++i){
  25. int u=gi(),v=gi();
  26. G.link(u,v);F.link(u,v);
  27. }
  28. dep[S]=1;Q.push(S);
  29. while (!Q.empty()){
  30. int u=Q.front();Q.pop();
  31. for (int e=G.hd[u];e;e=G.nxt[e]){
  32. int v=G.to[e];
  33. if (!dep[v]) dep[v]=dep[u]+1,Q.push(v);
  34. }
  35. }
  36. for (int i=1;i<=n;++i) --dep[i],ans[i]=min(dep[i]*A,(dep[i]>>1)*B+(dep[i]&1)*A);
  37. memset(dep,0,sizeof(dep));dep[S]=1;Q.push(S);
  38. while (!Q.empty()){
  39. int u=Q.front();Q.pop();
  40. for (int e=G.hd[u];e;e=G.nxt[e]) vis[G.to[e]]=u;
  41. for (int e=G.hd[u];e;e=G.nxt[e]){
  42. int v=G.to[e];
  43. for (int i=F.hd[v],las=0;i;i=F.nxt[i]){
  44. int w=F.to[i];
  45. if (vis[w]==u) {las=i;continue;}
  46. if (!dep[w]) dep[w]=dep[u]+1,Q.push(w);
  47. if (!las) F.hd[v]=F.nxt[F.hd[v]];
  48. else F.nxt[las]=F.nxt[i];
  49. }
  50. }
  51. }
  52. for (int i=1;i<=n;++i) if (dep[i]) --dep[i],ans[i]=min(ans[i],dep[i]*B);
  53. for (int i=1;i<=n;++i) printf("%d\n",ans[i]);
  54. return 0;
  55. }

[BZOJ3416][Poi2013]Take-out

从前往后依次压进栈中,如果栈内的前\(k+1\)个元素中恰好有一个白的就把这\(k+1\)个作为一组方案。倒序输出即可。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N = 1e6+5;
  5. int n,k,q[N],sum[N],top,ans[N],cnt;char s[N];
  6. int main(){
  7. scanf("%d%d%s",&n,&k,s+1);++k;
  8. for (int i=1;i<=n;++i){
  9. q[++top]=i;sum[top]=sum[top-1]+(s[i]=='c');
  10. if (top>=k&&sum[top]-sum[top-k]==1)
  11. for (int tt=top-k;top>tt;--top)
  12. ans[++cnt]=q[top];
  13. }
  14. for (int i=n;i;--i) printf("%d%c",ans[i],i%k==1?'\n':' ');
  15. return 0;
  16. }

[BZOJ3417][Poi2013]Tales of seafaring

\(O(n^2)\)预处理出\(i\)到\(j\)走奇数/偶数步的最短路。需要特判孤立点走大于零的偶数步到达自身是不合法的。

有人说预处理存不下?最短路长度最多\(2n\)你开个\(\mbox{short}\)存不就好啦?

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. int gi(){
  6. int x=0,w=1;char ch=getchar();
  7. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  8. if (ch=='-') w=0,ch=getchar();
  9. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  10. return w?x:-x;
  11. }
  12. const int N = 5005;
  13. short n,m,to[N<<1],nxt[N<<1],head[N],cnt,q[N<<1],hd,tl,dep[N][N<<1];
  14. int k;
  15. int main(){
  16. n=gi();m=gi();k=gi();
  17. for (short i=1;i<=m;++i){
  18. short u=gi(),v=gi();
  19. to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
  20. to[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
  21. }
  22. memset(dep,-1,sizeof(dep));
  23. for (short i=1;i<=n;++i){
  24. dep[i][i<<1]=0;q[hd=tl=1]=i<<1;
  25. while (hd<=tl){
  26. short x=q[hd++],u=x>>1,c=(x&1)^1;
  27. for (short e=head[u];e;e=nxt[e])
  28. if (!~dep[i][to[e]<<1|c])
  29. dep[i][to[e]<<1|c]=dep[i][x]+1,q[++tl]=to[e]<<1|c;
  30. }
  31. }
  32. while (k--){
  33. short u=gi(),v=gi();int d=gi();
  34. if (u==v&&!head[u]&&d>0) puts("NIE");
  35. else if (dep[u][v<<1|(d&1)]!=-1&&(int)dep[u][v<<1|(d&1)]<=d) puts("TAK");
  36. else puts("NIE");
  37. }
  38. return 0;
  39. }

[BZOJ3419][Poi2013]Taxis

首先可以发现的是,从大到小叫车是最优的,而且如果已行走距离超过了\(d\)就只需要一辆车就可以到终点了。

先从大到小叫车,这样如果有解的话一定是最优解,但是可能会无解,就比如说把所有\(\ge m-d\)的车全耗在了前半段导致后半段过不去。还是贪心,选出\(\ge m-d\)的最小的留给后半段,剩下的还是贪心选。这样就能得到答案了。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. #define ll long long
  5. ll gi(){
  6. ll x=0,w=1;char ch=getchar();
  7. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  8. if (ch=='-') w=0,ch=getchar();
  9. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  10. return w?x:-x;
  11. }
  12. const int N = 5e5+5;
  13. int n,p,ans;ll m,d,a[N],now;
  14. bool cmp(ll i,ll j){return i>j;}
  15. void cal(ll x){if(now<d)now+=max(0ll,x-d+now);else now=max(now,d+x);}
  16. int main(){
  17. m=gi();d=gi();n=gi();
  18. for (int i=1;i<=n;++i) a[i]=gi();
  19. sort(a+1,a+n+1,cmp);
  20. for (int i=1;i<=n;++i){
  21. cal(a[i]);if (now>=m) {ans=i;break;}
  22. if (a[i]>=m-d) p=i;
  23. }
  24. if (!ans){
  25. now=0;ll pos=d-(a[p]-m+d>>1);
  26. for (int i=1;i<=n;++i)
  27. if (i^p){
  28. cal(a[i]);if (now>=pos) {ans=i;break;}
  29. }
  30. }
  31. printf("%d\n",ans);return 0;
  32. }

[BZOJ3420][Poi2013]Triumphal arch

先二分答案,设\(f_i\)表示在\(i\)节点至少需要预先在\(i\)子树内标记多少个点,转移\(f_i=\max\{0,\sum_j (f_j+1)-k\}\)。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int gi(){
  5. int x=0,w=1;char ch=getchar();
  6. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  7. if (ch=='-') w=0,ch=getchar();
  8. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  9. return w?x:-x;
  10. }
  11. const int N = 6e5+5;
  12. int n,to[N],nxt[N],head[N],cnt;
  13. int dfs(int u,int f,int k){
  14. int s=0;
  15. for (int e=head[u];e;e=nxt[e])
  16. if (to[e]!=f) s+=dfs(to[e],u,k)+1;
  17. return max(0,s-k);
  18. }
  19. int main(){
  20. n=gi();
  21. for (int i=1;i<n;++i){
  22. int u=gi(),v=gi();
  23. to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
  24. to[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
  25. }
  26. int l=0,r=n-1,res=0;
  27. while (l<=r){
  28. int mid=l+r>>1;
  29. if (!dfs(1,0,mid)) res=mid,r=mid-1;
  30. else l=mid+1;
  31. }
  32. printf("%d\n",res);return 0;
  33. }

[BZOJ3421][Poi2013]Walk

有一个结论:在一个\(n\)维超立方体上有\(2^n\)个点,如果把这\(2^n\)个点分成\(2\)个点集,那么这样个点集之间的边数至少为两个点集的点数较小值。根据这个假设是已知的结论就可以证明一个定理:删除\(k\)个点后,图中存在至多一个大小大于\(nk\)的连通块,太懒了就不在这里证了。

所以直接\(bfs\),从\(S\)出发只扩展至多\(nk\)个状态,如果两边搜出了超过\(nk\)个状态还没有相遇就说明两点都在那个大于\(nk\)的连通块里面。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. #define ll long long
  6. const int N = 5e6+500;
  7. const int mod = 5170427;
  8. int n,k,nk,hd,tl,nxt[N],head[mod],cnt;ll a[N>>2],q[N],to[N];
  9. char s[100];
  10. ll read(){
  11. scanf("%s",s);ll res=0;
  12. for (int i=0;i<n;++i) res=res<<1|s[i]-'0';
  13. return res;
  14. }
  15. void add1(ll x){
  16. to[++cnt]=x;nxt[cnt]=head[x%mod];head[x%mod]=cnt;
  17. }
  18. void add2(ll x){
  19. for (int e=head[x%mod];e;e=nxt[e])
  20. if (to[e]==x) return;
  21. q[++tl]=to[++cnt]=x;nxt[cnt]=head[x%mod];head[x%mod]=cnt;
  22. }
  23. void work(ll S,ll T){
  24. memset(head,0,sizeof(head));cnt=0;
  25. hd=1;tl=0;add2(S);
  26. for (int i=1;i<=k;++i) add1(a[i]);
  27. while (hd<=tl&&tl<=nk){
  28. ll u=q[hd++];if (u==T) puts("TAK"),exit(0);
  29. for (int i=0;i<n;++i) add2(u^(1ll<<i));
  30. }
  31. if (tl<=nk) puts("NIE"),exit(0);
  32. }
  33. int main(){
  34. scanf("%d%d",&n,&k);nk=n*k;
  35. ll S=read(),T=read();
  36. for (int i=1;i<=k;++i) a[i]=read();
  37. work(S,T);work(T,S);
  38. puts("TAK");return 0;
  39. }

[BZOJ3425][Poi2013]Polarization

最小答案一定是\(n-1\),只要按边深度的奇偶性取不同的方向就可以取到了。

最大答案存在一个结论,就是以重心为根,剩下每棵子树要么全部指向根,要么全部背离根。假设指向根的子树大小之和是\(x\),那么背离根的子树大小之和就是\(n-x-1\),所有穿过根的贡献就是\(x(n-x-1)\)。

所以现在要做的就是拿重心的所有儿子出来做一个\(01\)背包看可以组成哪些\(x\)。直接背包压位的话复杂度是\(O(\frac{n^2}{32})\),然后把\(\ge \sqrt n\)的暴力做,\(< \sqrt n\)的放在一起二进制分组做,复杂度就是\(O(\frac{n\sqrt n}{32})\)。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<bitset>
  4. using namespace std;
  5. int gi(){
  6. int x=0,w=1;char ch=getchar();
  7. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  8. if (ch=='-') w=0,ch=getchar();
  9. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  10. return w?x:-x;
  11. }
  12. #define ll long long
  13. const int N = 250005;
  14. int n,to[N<<1],nxt[N<<1],head[N],cnt,sz[N],w[N],rt,s[505];
  15. ll f[N];bitset<N>g;
  16. void dfs(int u,int fa){
  17. sz[u]=1;w[u]=f[u]=0;
  18. for (int e=head[u],v;e;e=nxt[e])
  19. if ((v=to[e])!=fa){
  20. dfs(v,u);sz[u]+=sz[v];
  21. f[u]+=f[v]+sz[v];w[u]=max(w[u],sz[v]);
  22. }
  23. w[u]=max(w[u],n-sz[u]);if (w[u]<w[rt]) rt=u;
  24. }
  25. int main(){
  26. n=gi();if (n==1) return puts("0 0"),0;
  27. for (int i=1;i<n;++i){
  28. int u=gi(),v=gi();
  29. to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
  30. to[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
  31. }
  32. w[0]=n;dfs(1,0);dfs(rt,0);g[0]=1;
  33. for (int e=head[rt];e;e=nxt[e])
  34. if (sz[to[e]]>=500) g|=g<<sz[to[e]];
  35. else ++s[sz[to[e]]];
  36. for (int i=1;i<500;++i)
  37. for (int j=s[i],k=1;j;j-=k,k=min(j,k<<1))
  38. g|=g<<i*k;
  39. for (int i=n>>1;i;--i)
  40. if (g[i]) return printf("%d %lld\n",n-1,f[rt]+1ll*i*(n-i-1)),0;
  41. }

[BZOJ3426][Poi2013]Tower Defense Game

直接每次选一个没覆盖的点就行了,因为这样做一定可以包含至少一个最优方案中的选择点。

至于维护这个覆盖,对每个点记一下最近的选择点到他的距离(代码中有点不一样,没关系啦),覆盖时如果不能更新这个距离就不走了(因为之前肯定已经走过了)。考虑到每个点的这个距离只会被更新常数次,所以复杂度是对的。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int gi(){
  5. int x=0,w=1;char ch=getchar();
  6. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  7. if (ch=='-') w=0,ch=getchar();
  8. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  9. return w?x:-x;
  10. }
  11. const int N = 2e6+5;
  12. int n,m,to[N],nxt[N],head[N],cnt,vis[N],q[N],ans;
  13. void dfs(int u,int c){
  14. vis[u]=c;
  15. for (int e=head[u];e;e=nxt[e])
  16. if (vis[to[e]]<c-1) dfs(to[e],c-1);
  17. }
  18. int main(){
  19. n=gi();m=gi();gi();
  20. for (int i=1;i<=m;++i){
  21. int u=gi(),v=gi();
  22. to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
  23. to[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
  24. }
  25. for (int i=1;i<=n;++i) if (!vis[i]) q[++ans]=i,dfs(i,3);
  26. printf("%d\n",ans);
  27. for (int i=1;i<=ans;++i) printf("%d ",q[i]);
  28. puts("");return 0;
  29. }

[BZOJ3427][Poi2013]Bytecomputer

猜个结论最终序列一定是一段\(-1\)一段\(0\)一段\(1\)?

这样以来就直接\(dp\)一下就好了。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. int gi(){
  6. int x=0,w=1;char ch=getchar();
  7. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  8. if (ch=='-') w=0,ch=getchar();
  9. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  10. return w?x:-x;
  11. }
  12. const int N = 1e6+5;
  13. int n,f[N][3];
  14. int main(){
  15. memset(f,63,sizeof(f));
  16. n=gi();f[1][gi()+1]=0;
  17. for (int i=2;i<=n;++i){
  18. int x=gi();
  19. if (x==1){
  20. f[i][2]=min(f[i-1][2],min(f[i-1][0],f[i-1][1]));
  21. f[i][1]=f[i-1][0]+1;f[i][0]=f[i-1][0]+2;
  22. }else if (x==0){
  23. f[i][1]=min(f[i-1][1],f[i-1][0]);
  24. f[i][2]=f[i-1][2]+1;f[i][0]=f[i-1][0]+1;
  25. }else f[i][0]=f[i-1][0],f[i][2]=f[i-1][2]+2;
  26. }
  27. int ans=min(f[n][0],min(f[n][1],f[n][2]));
  28. if (ans==f[0][0]) puts("BRAK");
  29. else printf("%d\n",ans);
  30. return 0;
  31. }

POI2013题解的更多相关文章

  1. 【题解】[P3557 POI2013]GRA-Tower Defense Game

    [题解][P3557 POI2013]GRA-Tower Defense Game 这道题是真的** 根据题目给的\(k\),可以知道,我们随便放塔,只要不全放一起,一定是一种合法的方案. 直接枚举就 ...

  2. 题解 [POI2013]SPA-Walk

    题目传送门 题目大意 给出两个长度为 \(n\) 的 \(01\) 串,问是否可以通过某一位把 \(s\) 变为 \(t\),但是中途不能变为 \(k\) 个 \(01\) 串中任意一个,问是否可行. ...

  3. 题解 luoguP3554 【[POI2013]LUK-Triumphal arch】

    代码的关键部分 inline void dfs(int u,int fa) { ; for(int i=first[u]; i; i=nxt[i]) { int v=go[i]; if(v==fa)c ...

  4. [POI2013]Morskie opowieści

    [POI2013]Morskie opowieści 题目大意: 一个\(n(n\le5000)\)点\(m(m\le5000)\)边无向图,边权均为\(1\),有\(k(k\le10^6)\)个询问 ...

  5. 【BZOJ3416】Poi2013 Take-out 栈

    [BZOJ3416]Poi2013 Take-out Description 小F喜欢玩一个消除游戏——take-out 保证k+1|n,保证输入数据有解这是一个单人游戏 游戏者的目标是消除初始时给定 ...

  6. 【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS

    [BZOJ3417]Poi2013 Tales of seafaring Description 一个n点m边无向图,边权均为1,有k个询问 每次询问给出(s,t,d),要求回答是否存在一条从s到t的 ...

  7. 【BZOJ3425】Poi2013 Polarization 猜结论+DP

    [BZOJ3425]Poi2013 Polarization Description 给定一棵树,可以对每条边定向成一个有向图,这张有向图的可达点对数为树上有路径从u到达v的点对(u,v)个数.求最小 ...

  8. 【BZOJ3417】[POI2013]MOR-Tales of seafaring (最短路SPFA)

    [POI2013]MOR-Tales of seafaring 题目描述 一个n点m边无向图,边权均为1,有k个询问 每次询问给出(s,t,d),要求回答是否存在一条从s到t的路径,长度为d 路径不必 ...

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

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

随机推荐

  1. Linq to Sharepoint--如何获取Linq Query 生成的CALM

    我们知道Linq to sharepoint 实际最终还是转化成了CALM来对Sharepoint进行访问,那么我们怎样才能知道我们编写的Query语句最终转化成的CALM语句是什么样子呢. 我们可以 ...

  2. ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution

    A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...

  3. ZW团队:IN_OUT传播模型简介

    传统媒体,网络媒体的整合推广,我曾经提出过一个:Tn-Out模式 In-Out是NBA的篮球术语,你自己百度下 传统媒体承担"IN"的角色,负责传播的深度和建立公信力 网络媒体充当 ...

  4. this指向 - Node环境

    1.全局上下文中 this /* 1.全局上下文中的 this node环境下: 严格模式下: {} {} 报错 非严格模式下:{} {} {} */ 'use strict'; // 严格模式 // ...

  5. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))

    Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实例系列文章的第4篇,该系列所有文章链接如下: http://www.cnblogs.com/aierong/a ...

  6. linux 导入导出mysql相关问题

    linux 导入mysql报错 CREATE DATABASE `mmm` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;   CREATE D ...

  7. WebApi Session支持

    代码: WebApiConfig using System; using System.Collections.Generic; using System.Linq; using System.Net ...

  8. NSwag给api加上说明

    参考http://petstore.swagger.io 给controller加上description https://github.com/RSuter/NSwag/issues/1803 xm ...

  9. SDN前瞻 该来的来了!SDN 软件定义网络

    SDDC:Software Defined Data Center 软件定义数据中心,全数据中心软件化. 在我们接触SDN概念之前,服务器虚拟化,软件虚拟化技术已经是非常成熟了.如果网络能够被虚拟化, ...

  10. POJ 1860 Currency Exchange(Bellman-Ford)

    https://vjudge.net/problem/POJ-1860 题意: 有多种货币,可以交换,有汇率并且需要支付手续费,判断是否能通过不断交换使本金变多. 思路: Bellman-Ford算法 ...