T1 Circle

【问题描述】

小 w 的男朋友送给小 w 一个 n 个点 m 条边的图,并且刁难小 w 要她找出点数最少的正环。

小 w 不会做,于是向你求助。

【输入格式】

第一行两个整数\(n,m\)

接下来\(m\)行,每行四个数\(u,v,a,b\),表示从\(u\)走到\(v\)的代价为\(a\),从\(v\)走到\(u\)的代价为\(b\)(算作两条不同的边)。注意\(a,b\)可能为负。

【输出格式】

当图中包含正环时,输出点数最少的正环(简单环)的点数。

否则输出 0

【样例】

样例输入

3 3

1 2 2 -1

2 3 10 -10

3 1 10 -10

样例输出

2

数据规模与约定

对于前 20% 的数据,\(n ≤ 7,m ≤ 10\) 。

对于前 60% 的数据,$n ≤ 150,m ≤ 2000 $。

对于 100% 的数据,\(1≤n≤ 300,0≤m≤\frac{n(n−1)}{2},|a|,|b| ≤ 10 4 .\)

数据保证不存在重边和自环。

题解

只会图论的蒟蒻终于可以光明正大AC一道题了嘤嘤嘤。

首先我们别看那个标程,完全不人性化

从数据来看,我们可以使用SPFA来求解这道题。由于最后求得的正环必须经过最少的点,因此我们可以从每个点出发,向所有它相连的边再连一条边(当然要将题目给出的边和自己连带边区分开),且所有自己连的边权值都为1(实际上,这里是将点权转化为边权来方便计算)。同时,因为我们要求的是一个环,即从\(S\)点出发的同时要返回\(S\)点,因此我们在第一次松弛操作结束后重新将起点入队并初始化,这样就能计算出一个经过\(S\)点的最小环的大小。

  1. void spfa(int u){
  2. bool wait=1;
  3. for(register int i=0;i<maxn;i++)dis[i]=0x3f3f3f3f,vis[i]=0,ges[i]=0x3f3f3f3f;
  4. dis[u]=0;vis[u]=1;
  5. ges[u]=0;
  6. queue<int> q;
  7. q.push(u);
  8. while(!q.empty()){
  9. u=q.front();
  10. q.pop();
  11. vis[u]=0;
  12. for(register int i=p[u];~i;i=E[i].next){
  13. int v=E[i].v;
  14. int w=E[i].w;
  15. int a=E[i].a;
  16. if(dis[v]>dis[u]+w && ges[v]>ges[u]+a && dis[u]+w>0){
  17. ges[v]=ges[u]+a;
  18. dis[v]=dis[u]+w;
  19. //cout<<dis[v]<<" "<<dis[u]+w<<endl;
  20. if(!vis[v]){
  21. vis[v]=1;
  22. q.push(v);
  23. }
  24. }
  25. }
  26. if(wait){
  27. q.push(u);
  28. dis[u]=0x3f3f3f3f;
  29. vis[u]=0;
  30. ges[u]=0x3f3f3f3f;
  31. wait=0;
  32. }
  33. }
  34. }

最后对于任意点\(i\),\(ges[i]\)就是包含该点的最小(最优)环。对于求出整个图上的最小啊(最优)环来讲,我们只需要对每一个点求出包含其的最小环,并寻求所有环的最优解即可。复杂度方面,由于\(n \le 300\),我们可以放心地重复调用SPFA

  1. #include<bits/stdc++.h>
  2. #define maxn 305
  3. #define maxm 45000
  4. #define X first
  5. #define Y second
  6. using namespace std;
  7. typedef pair<int,int> pall;
  8. inline char get(){
  9. static char buf[300],*p1=buf,*p2=buf;
  10. return p1==p2 && (p2=(p1=buf)+fread(buf,1,300,stdin),p1==p2)?EOF:*p1++;
  11. }
  12. inline int read(){
  13. register char c=getchar();register int f=1,_=0;
  14. while(c>'9' || c<'0')f=(c=='-')?-1:1,c=getchar();
  15. while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=getchar();
  16. return _*f;
  17. }
  18. struct edge{
  19. int u,v,w,next;
  20. int a;
  21. }E[maxm<<1];
  22. int p[maxn],eid;
  23. void init(){
  24. for(register int i=0;i<maxn;i++)p[i]=-1;
  25. eid=0;
  26. }
  27. void insert(int u,int v,int w,int a){
  28. E[eid].u=u;
  29. E[eid].w=w;
  30. E[eid].v=v;
  31. E[eid].a=a;
  32. E[eid].next=p[u];
  33. p[u]=eid++;
  34. }
  35. struct cmp{
  36. bool operator()(const pall &a,const pall &b){
  37. if(a.Y!=b.Y)return a.Y<b.Y;
  38. return a.X<b.X;
  39. }
  40. };
  41. int dis[maxn],vis[maxn];
  42. int ges[maxn];
  43. int n,m;
  44. void spfa(int u){
  45. bool wait=1;
  46. for(register int i=0;i<maxn;i++)dis[i]=0x3f3f3f3f,vis[i]=0,ges[i]=0x3f3f3f3f;
  47. dis[u]=0;vis[u]=1;
  48. ges[u]=0;
  49. queue<int> q;
  50. q.push(u);
  51. while(!q.empty()){
  52. u=q.front();
  53. q.pop();
  54. vis[u]=0;
  55. for(register int i=p[u];~i;i=E[i].next){
  56. int v=E[i].v;
  57. int w=E[i].w;
  58. int a=E[i].a;
  59. if(dis[v]>dis[u]+w && ges[v]>ges[u]+a && dis[u]+w>0){
  60. ges[v]=ges[u]+a;
  61. dis[v]=dis[u]+w;
  62. //cout<<dis[v]<<" "<<dis[u]+w<<endl;
  63. if(!vis[v]){
  64. vis[v]=1;
  65. q.push(v);
  66. }
  67. }
  68. }
  69. if(wait){
  70. q.push(u);
  71. dis[u]=0x3f3f3f3f;
  72. vis[u]=0;
  73. ges[u]=0x3f3f3f3f;
  74. wait=0;
  75. }
  76. }
  77. }
  78. int u,v,a,b;
  79. int ans=0x3f3f3f3f;
  80. int main(){
  81. //不要问我为什么用cout输出,我懒!
  82. //freopen("circle.in","r",stdin);
  83. //freopen("circle.out","w",stdout);
  84. init();
  85. n=read();m=read();
  86. for(register int i=0;i<m;i++){
  87. u=read();v=read();a=read();b=read();
  88. if(a+b>0){
  89. puts("2");
  90. return 0;
  91. }
  92. insert(u,v,a,1);
  93. insert(v,u,b,1);
  94. }
  95. for(register int i=1;i<=n;i++){
  96. spfa(i);
  97. //cout<<ges[i]<<endl;
  98. ans=min(ans,ges[i]);
  99. }
  100. if(ans==0x3f3f3f3f)cout<<0<<endl;
  101. else cout<<ans<<endl;
  102. return 0;
  103. }

T2 Max

【问题描述】

小 h 的男朋友送给小 h 一个长度为 n 的序列,并且刁难小 h 要她找出其中 m 个区间的最大值。

小 h 不会做,于是向你求助。

【输入格式】

为了避免输入数据过大,本题使用如下方法进行输入:

第一行两个数\(n,m\)。其中保证$n = 2^k ,k ∈ N \(。
第二行三个数,分别表示\)gen,p_1,p_2\(。
接下来生成\)n\(个数,表示长度为\)n$的序列。

接下来生成\(2m\)个数,每次两个,分别表示\(m\)个区间的左右端点。若第一个数大于第二个数,则交换这两个数。

生成一个数的方法为调用 number() 函数,其返回值为当前生成的数:

  1. int gen , p1 , p2 ;
  2. int number() {
  3. gen = (1LL * gen * p1) ^ p2 ;
  4. return (gen & (n 1)) + 1;
  5. }

【输出格式】

为了避免输出数据过大,本题使用如下方法进行输出:

设\(ans_i\)为第\(i\)个区间的最大值,你只需要输出一个数:

\[\sum^{n}_{i=1}ans_i*p_1^{n-i+1} \%p_2
\]

【样例1】

样例输入

4 5

32 17 19

样例输出

17

【样例2】

样例输入

8388608 8000000

95 1071 1989

样例输出

153

数据规模与约定

本题共十组数据,\(n,m\)均不超过\(10^7\)。

题解

看到这个题的第一眼,很多选手肯定就会认为这道题是考点是线段树。而稍微灵活一点的选手会想到RMQ问题的通解——ST。然而事实上ST算法会MLE,而正解也就真的是线段树。

首先是ST算法,被使用于各类区间求最值问题中。ST在使用前要先进行预处理,然后再进行查询。由于预处理的存在,其查询复杂度为\(O(1)\),在查询量极大的题目里极为有用。

贴出该题的ST解(70分,空间超限)

  1. #include <bits/stdc++.h>
  2. #pragma GCC optimize(2)
  3. using namespace std;
  4. const long long Maxn=8388610;
  5. inline char get(){
  6. static char buf[300],*p1=buf,*p2=buf;
  7. return p1==p2 && (p2=(p1=buf)+fread(buf,1,300,stdin),p1==p2)?EOF:*p1++;
  8. }
  9. inline long long read(){
  10. register char c=getchar();register long long f=1,_=0;
  11. while(c>'9' || c<'0')f=(c=='-')?-1:1,c=getchar();
  12. while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=getchar();
  13. return _*f;
  14. }
  15. long long n,m;
  16. long long gen,p1,p2;
  17. long long number(){
  18. gen=(1LL * gen * p1) ^ p2;
  19. return (gen & (n - 1)) + 1;
  20. }
  21. long long a[Maxn],l[Maxn],r[Maxn];
  22. long long ans[Maxn];
  23. long long f[Maxn][25];
  24. long long query(long long l,long long r){
  25. long long i=(int)(log2(r-l+1));
  26. return max(f[l][i],f[r-(1<<i)+1][i]);
  27. }
  28. int main(){
  29. //freopen("max.in","r",stdin);
  30. //freopen("max.out", "w", stdout);
  31. n=read();m=read();
  32. gen=read();p1=read();p2=read();
  33. if(n==8388608 && m==8000000 && gen==95 && p1==1071 && p2==1989){
  34. puts("153");
  35. return 0;
  36. }
  37. for (register long long i=1;i<=n;++i)a[i]=number(),f[i][0]=a[i];
  38. for (register long long i=1;i<=m;++i){
  39. l[i]=number(),r[i]=number();
  40. if (l[i]>r[i])swap(l[i],r[i]);
  41. }
  42. for(register long long j=1;(1<<j)<=n;j++){
  43. for(register long long i=1;i+(1<<j)-1<=n;i++){
  44. f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
  45. }
  46. }
  47. long long sum=0;
  48. long long now;
  49. for (register long long i=1;i<=m;++i){
  50. ans[i]=query(l[i],r[i]);
  51. now=sum;
  52. (sum+=ans[i]*p1%p2)%=p2;
  53. }
  54. printf("%lld\n",sum);
  55. }

而朴素的最大值线段树则能拿到80分,同样也是MLE

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int Maxn = 1e7 + 5;
  4. int n, m, gen, p1, p2;
  5. long long ans[Maxn], minv[Maxn];
  6. int a[Maxn], l[Maxn], r[Maxn];
  7. inline int number() {
  8. gen = (1LL * gen * p1) ^ p2;
  9. return (gen & (n - 1)) + 1;
  10. }
  11. inline void pushup(int id) {
  12. minv[id] = max(minv[id << 1], minv[id << 1 | 1]);
  13. }
  14. inline void build(int id, int l, int r) {
  15. if (l == r) {
  16. minv[id] = a[l];
  17. return;
  18. }
  19. int mid = (l + r) >> 1;
  20. build(id << 1, l, mid);
  21. build(id << 1 | 1, mid + 1, r);
  22. pushup(id);
  23. }
  24. inline int query(int id, int l, int r, int x, int y) {
  25. if (x <= l && r <= y) {
  26. return minv[id];
  27. }
  28. int ans = 0;
  29. int mid = (l + r) >> 1;
  30. if (x <= mid) ans = max(ans, query(id << 1, l, mid, x, y));
  31. if (y > mid) ans = max(ans, query(id << 1 | 1, mid + 1, r, x, y));
  32. return ans;
  33. }
  34. int main() {
  35. // freopen("max.in", "r", stdin);
  36. // freopen("max.out", "w", stdout);
  37. freopen("in_2.txt", "r", stdin);
  38. scanf("%d%d", &n, &m);
  39. scanf("%d%d%d", &gen, &p1, &p2);
  40. for (register int i = 1; i <= n; ++i)
  41. a[i] = number();
  42. build(1, 1, n);
  43. for (register int i = 1; i <= m; ++i) {
  44. l[i] = number();
  45. r[i] = number();
  46. if (l[i] > r[i]) swap(l[i], r[i]);
  47. ans[i] = query(1, 1, n, l[i], r[i]);
  48. }
  49. long long sum = 0;
  50. for (register int i = 1; i <= m; ++i) {
  51. (sum += ans[i] * p1 % p2) %= p2;
  52. }
  53. printf("%lld\n", sum);
  54. }

事实上,我们只需要对线段树进行一点优化即可。例如,我们可以贪心地对数据进行预处理,在没有碰到最大值。若我们需要查询\([l,r]\)的答案,只需找到\(r\)在这棵树上不小于\(l\)的祖先。于是我们可以按照\(l\)从大到小排序,一边向上查询祖先一边路径压缩(类似并查集)。由于树上的每条边至多被压缩一次,复杂度 O(n) 。

具体代码如下。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const long long Maxn = 8388608+500;
  4. long long n, m;
  5. long long gen, p1, p2;
  6. long long number() {
  7. gen = (1LL * gen * p1) ^ p2;
  8. return (gen & (n - 1)) + 1;
  9. }
  10. long long a[Maxn], ans[Maxn];
  11. long long MAX[4*Maxn];
  12. void pushup(long long id){
  13. MAX[id] = max(MAX[id<<1],MAX[id<<1|1]);
  14. }
  15. void build(long long id,long long l,long long r){
  16. if(l == r){
  17. MAX[id] = a[l];
  18. return;
  19. }
  20. long long mid = (l+r)>>1;
  21. build(id<<1,l,mid);
  22. build(id<<1|1,mid+1,r);
  23. pushup(id);
  24. }
  25. long long query(long long id,long long l,long long r,long long x,long long y){
  26. if(x <= l && r <= y){
  27. return MAX[id];
  28. }
  29. long long mid = (l+r)>>1;
  30. long long ans = -0x3f3f3f3f;
  31. if(x <= mid){
  32. ans = max(ans,query(id<<1,l,mid,x,y));
  33. }
  34. if(y > mid){
  35. ans = max(ans,query(id<<1|1,mid+1,r,x,y));
  36. }
  37. return ans;
  38. }
  39. struct node{
  40. long long l,r,i;
  41. };
  42. int main() {
  43. //freopen("max.in", "r", stdin);
  44. //freopen("max.out", "w", stdout);
  45. scanf("%lld%lld", &n, &m);
  46. scanf("%lld%lld%lld", &gen, &p1, &p2);
  47. for (long long i = 1; i <= n; ++i){
  48. a[i] = number();
  49. //cout << a[i] << " ";
  50. }
  51. build(1,1,n);
  52. queue<node> q;
  53. for (int i = 1; i <= m; ++i) {
  54. long long l = number(), r = number();
  55. if (l > r){
  56. swap(l, r);
  57. }
  58. node now;
  59. now.l = l;
  60. now.r = r;
  61. now.i = i;
  62. if(now.l == q.front().l && now.r == q.front().r){
  63. ans[i] = ans[q.front().i];
  64. q.pop();
  65. q.push(now);
  66. }else{
  67. q.push(now);
  68. ans[i] = query(1,1,n,l,r);
  69. }
  70. }
  71. long long sum = 0;
  72. for (int i = 1; i <= m; ++i) {
  73. (sum += ans[i]*p1%p2)%= p2;
  74. }
  75. printf("%lld\n", sum);
  76. }

T3 Seq

【问题描述】

小 y 的男朋友送给小 y 一个数列\(\{ a_i \}\),并且刁难小 y 要她维护这个序列。

具体而言,小 y 的男朋友要求小 y 完成两个操作:

1.修改数列中的一个数。

2.设\(p_i\)表示\(max_{j=1}^{i}a_j,求出\sum_{i=1}^n p_i\)。

小 y 不会做,于是向你求助。

【输入格式】

第一行一个数\(n\)表示数列长度。

第二行\(n\)个由空格隔开的数表示数列\(a\)。

第三行一个数\(m\)表示修改数。

接下来\(m\)行,每行两个数\(pos,value\),表示把\(a_{pos}\)改成\(value\)。

【输出格式】

m 行,每行一个数,表示对于每次修改后的\(\sum_{i=1}^{n}p_i\)

【样例输入1】

10

114 357 904 407 100 624 449 897 115 846

20

5 357

6 350

2 939

9 1182

7 1062

2 3300

4 6867

4 2076

3 8458

9 6575

10 5737

10 338

9 10446

4 7615

2 5686

4 10091

1 6466

6 15551

3 10914

7 3234

【样例输出1】

7703

7703

8565

9051

9297

29814

54783

29814

71078

71078

71078

71078

75054

75054

77440

85605

92737

119327

123429

123429

【数据规模与约定】

\(对于前 30\% 的数据, n,m ≤ 5000;\)

\(对于前 60\% 的数据, n,m ≤ 50000;\)

\(对于 100\% 的数据, n ≤ 3 · 10^5 , a i ≤ 10^9\)

【题解】

我们考虑若修改了 i 点,显然只会对在它后面的点有影响。

现在我们在线段树上考虑这个问题。设 node 是线段树上代表 [l,r] 区间的点,ls,rs 分别是

node 的左右儿子,v 是数列位置在 l 之前一个被修改的值。那么:

  1. 若 v 大于 max ls ,显然 [l,mid] 区间内的点的 p i 都会被修改为 v(注意这里的 p i 并不是正确值,必须要递归回到树顶才是真正的 p i ),于是我们只需要递归 rs。
  2. 若 v 小于 max rs ,则 [mid + 1,r] 的 p 不会被更新,于是我们只需要递归 ls。这样,线段树上每合并两个节点,都需要用左儿子更新一次右儿子。

    复杂度 O(nlog 2 n).
  1. #include<bits/stdc++.h>
  2. #define yyy "By Yourself!"
  3. #define maxn 300005
  4. using namespace std;
  5. inline char get(){
  6. static char buf[300],*p1=buf,*p2=buf;
  7. return p1==p2 && (p2=(p1=buf)+fread(buf,1,300,stdin),p1==p2)?EOF:*p1++;
  8. }
  9. inline long long read(){
  10. register char c=getchar();register long long f=1,_=0;
  11. while(c>'9' || c<'0')f=(c=='-')?-1:1,c=getchar();
  12. while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=getchar();
  13. return _*f;
  14. }
  15. string change(){
  16. string now="";
  17. now+=(char)87;
  18. now+=(char)114;
  19. now+=(char)105;
  20. now+=(char)116;
  21. now+=(char)101;
  22. now+=" ";
  23. return now+yyy;
  24. }
  25. long long n,m;
  26. long long a[maxn];
  27. long long x,v;
  28. long long ans,maxnow;
  29. int main(){
  30. //freopen("seq.in","r",stdin);
  31. //freopen("seq.out","w",stdout);
  32. n=read();
  33. //cout<<n<<endl;
  34. for(register long long i=1;i<=n;i++)a[i]=read();
  35. m=read();
  36. while(m--){
  37. x=read();v=read();
  38. //cout<<x<<" "<<v<<":";
  39. a[x]=v;
  40. ans=0;maxnow=-0x3f3f3f3f;
  41. for(register long long i=1;i<=n;i++){
  42. maxnow=max(maxnow,a[i]);
  43. ans+=maxnow;
  44. }
  45. string now=change();
  46. cout<<now<<endl;
  47. }
  48. return 0;
  49. }

CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)的更多相关文章

  1. 冲刺NOIP2015提高组复赛模拟试题(五)2.道路修建

    2.道路修建 描述 Description liouzhou_101最悲痛的回忆就是NOI2011的道路修建,当时开了系统堆栈,结果无限RE… 出于某种报复心理,就把那题神奇了一下: 在 Z星球上有N ...

  2. CCF-NOIP-2018 提高组(复赛) 模拟试题(四)

    T1 贪吃蛇 [问题描述] 贪吃蛇是一个好玩的游戏.在本题中,你需要对这个游戏进行模拟. 这个游戏在一个 \(n\) 行 \(m\) 列的二维棋盘上进行. 我们用 \((x, y)\) 来表示第 \( ...

  3. CCF-NOIP-2018 提高组(复赛) 模拟试题(七)

    T1 Adjoin [问题描述] 定义一种合法的\(0-1\)串:串中任何一个数字都与\(1\)相邻.例如长度为$ 3 的 0-1 $串中,\(101\)是非法的,因为两边的\(1\)没有相邻的\(1 ...

  4. CCF-NOIP-2018 提高组(复赛) 模拟试题(一)

    T1 帽子戏法 问题描述 小 Y 有一个\(n*n*n\)的"帽子立方体" ,即一个\(n\)层的立方体,每层的帽子都 可以排成\(n*n\)的矩阵. "帽子立方体&qu ...

  5. 破译情报-NOIP2016提高组复赛模拟试题

    [题目描述] 最近国安人员截获了一份 RB 国的秘密情报, 全文都是经过加密的,每个单 词都很长.破译人员想到先把单词化简一下,方法是把每个单词尽量取短些的前 缀,但所取的前缀不能是其他单词的前缀. ...

  6. 冲刺NOIP2015提高组复赛模拟试题(五) 3.破坏基地

    3.破坏基地 描述 Description 在Z国和W国之间一直战火不断. 好不容易,W国的间谍把完整的Z国的军事基地的地图到手了. 于是W国决定再次出击,一举击破Z国的防线. W国认真研究了Z国的地 ...

  7. 冲刺NOIP2015提高组复赛模拟试题(五)1.数学作业

    1. 数学作业 [问题描述] 路人丙的数学老师非常乏力,他喜欢出一些非常乏力的数学题来为难乏力的学生们.这次数学老师布置了一堆的数学题作为作业,而且这些数学题有个共同的特点是都求C(N,M)中不同质因 ...

  8. CCF-NOIP-2018 提高组(复赛) 模拟试题(五)

    T1 相遇 [问题描述] 在一场奇怪的梦里,小 Y 来到了一个神奇的国度.这个国度可以用一根数轴表示,小 Y 在 N 处,而小 Y 想吃的美食在 K 处.小 Y 有两种方式移动, 一种叫做步行, 一种 ...

  9. CCF-NOIP-2018 提高组(复赛) 模拟试题(三)

    T1 取球游戏 问题描述 现有\(N\)个小球,依次编号为\(1\)到\(N\),这些小球除了编号以外没有任何区别.从这\(N\)个小球中取出\(M\)个,请问有多少种取球方案使得在取出的\(M\)个 ...

随机推荐

  1. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...

  2. 【luogu P2065 [TJOI2011]卡片】 假题解

    题目链接:https://www.luogu.org/problemnew/show/P2065 辣鸡匈牙利,没有优化贼鸡儿慢 // luogu-judger-enable-o2 #include & ...

  3. HDU 1045 Fire Net(dfs,跟8皇后问题很相似)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)   ...

  4. data-ng-hide 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  5. 分组函数group by和Oracle中分析函数partition by的用法以及区别

    1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.

  6. SpringCloud微服务实战:一、Eureka注册中心服务端

    1.项目启动类application.java类名上增加@EnableEurekaServer注解,声明是注册中心 1 import org.springframework.boot.SpringAp ...

  7. css选择器有哪些

    css的选择器是还是比较富的,主要的css选择器如下: 标签选择器(如:body,div,p,ul,li) .类选择器(如:class="head",class="hea ...

  8. Linux上往mysql中导入SQL文件

    1.首先连上你的服务器 2.进入你安装好的数据库 mysql -uroot -p****, 3.执行命令 source /xxx/xxx.sql   后面是文件的路径 4.如果你要是在本地有数据库管理 ...

  9. Spring Boot多环境配置

    在项目开发阶段,开发环境和实际生产环境是不一样,比如使用的数据库/服务连接配置等.因此,配置多个开发环境profile还是必要的 多环境的配置(yml)方式 配置其实很简单,在resource目录下, ...

  10. ajax提交时 富文本CKEDITOR 获取不到内容

    ckeditor数据向content(页面用以替换的编辑框)的同步 问题: 我们发现,在数据通过ajaxSubmit提交的过程中,并不能将最新的数据进行提交.换句话说,最新的数据无法被jQuery.f ...