题面:https://www.cnblogs.com/Juve/articles/11678564.html

简单的操作:

考场上sb了,没看出来

如果有奇环一定不能缩成一条链,判掉奇环后就是bfs最短路了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. using namespace std;
  7. const int MAXN=;
  8. const int MAXM=1e5+;
  9. int n,m,col[MAXN],tot=,ans=,bel[MAXN],res[MAXN];
  10. int to[MAXM<<],nxt[MAXM<<],pre[MAXN],cnt=;
  11. void add(int u,int v){
  12. ++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt;
  13. }
  14. bool dfs(int x,int c){
  15. col[x]=c,bel[x]=tot;
  16. for(int i=pre[x];i;i=nxt[i]){
  17. int y=to[i];
  18. if(col[y]==c) return ;
  19. else if((!col[y])&&(!dfs(y,-c))) return ;
  20. }
  21. return ;
  22. }
  23. int dis[MAXN];
  24. void bfs(int st){
  25. memset(dis,,sizeof(dis));
  26. queue<int>q;
  27. dis[st]=;
  28. q.push(st);
  29. while(!q.empty()){
  30. int x=q.front();
  31. q.pop();
  32. for(int i=pre[x];i;i=nxt[i]){
  33. int y=to[i];
  34. if(dis[y]==){
  35. dis[y]=dis[x]+;
  36. q.push(y);
  37. }
  38. }
  39. }
  40. }
  41. int main(){
  42. scanf("%d%d",&n,&m);
  43. for(int i=,u,v;i<=m;++i){
  44. scanf("%d%d",&u,&v);
  45. add(u,v),add(v,u);
  46. }
  47. for(int i=;i<=n;++i){
  48. if(!col[i]){
  49. ++tot;
  50. if(!dfs(i,)){
  51. ans=-;
  52. break;
  53. }
  54. }
  55. }
  56. if(ans==-){
  57. printf("%d\n",ans);
  58. return ;
  59. }
  60. for(int i=;i<=n;++i){
  61. bfs(i);
  62. for(int j=;j<=n;++j){
  63. res[bel[i]]=max(res[bel[i]],dis[j]-);
  64. }
  65. }
  66. for(int i=;i<=tot;++i){
  67. ans+=res[i];
  68. }
  69. printf("%d\n",ans);
  70. return ;
  71. }

2048:

话说我不会2048考场上是不是爆0了?

就是模拟

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. int n,m,mp[][],ans=;
  7. bool flag=,vis[][];
  8. int get(){
  9. int res=;
  10. for(int i=;i<=n;++i){
  11. for(int j=;j<=n;++j)
  12. res+=(mp[i][j]==);
  13. }
  14. return res;
  15. }
  16. void put(int pos,int val){
  17. for(int i=;i<=n;++i){
  18. for(int j=;j<=n;++j){
  19. if(mp[i][j]!=) continue;
  20. --pos;
  21. if(pos==){
  22. mp[i][j]=val;
  23. return ;
  24. }
  25. }
  26. }
  27. }
  28. void mergeup(){
  29. for(int i=;i<=n;++i){
  30. for(int j=;j<=n;++j){
  31. if(mp[i][j]==) continue;
  32. int p=i-,k=mp[i][j];
  33. while(p>&&mp[p][j]==) mp[p][j]=k,mp[p+][j]=,--p;
  34. if(p!=i-) flag=;
  35. if(vis[p][j]==&&mp[p+][j]==mp[p][j]) mp[p][j]<<=,mp[p+][j]=,flag=vis[p][j]=,ans+=mp[p][j];
  36. }
  37. }
  38. }
  39. void up(){
  40. for(int i=;i<=n;++i){
  41. for(int j=;j<=n;++j){
  42. if(mp[i][j]==) continue;
  43. int p=i-,k=mp[i][j];
  44. while(p>&&mp[p][j]==) mp[p][j]=k,mp[p+][j]=,--p;
  45. if(p!=i-) flag=;
  46. }
  47. }
  48. }
  49. void mergedown(){
  50. for(int i=n-;i>=;--i){
  51. for(int j=;j<=n;++j){
  52. if(mp[i][j]==) continue;
  53. int p=i+,k=mp[i][j];
  54. while(p<=n&&mp[p][j]==) mp[p][j]=k,mp[p-][j]=,++p;
  55. if(p!=i+) flag=;
  56. if(vis[p][j]==&&mp[p-][j]==mp[p][j]) mp[p][j]<<=,mp[p-][j]=,flag=vis[p][j]=,ans+=mp[p][j];
  57. }
  58. }
  59. }
  60. void down(){
  61. for(int i=n-;i>=;--i){
  62. for(int j=;j<=n;++j){
  63. if(mp[i][j]==) continue;
  64. int p=i+,k=mp[i][j];
  65. while(p<=n&&mp[p][j]==) mp[p][j]=k,mp[p-][j]=,++p;
  66. if(p!=i+) flag=;
  67. }
  68. }
  69. }
  70. void mergeleft(){
  71. for(int j=;j<=n;++j){
  72. for(int i=;i<=n;++i){
  73. if(mp[i][j]==) continue;
  74. int p=j-,k=mp[i][j];
  75. while(p>&&mp[i][p]==) mp[i][p]=k,mp[i][p+]=,--p;
  76. if(p!=j-) flag=;
  77. if(vis[i][p]==&&mp[i][p]==mp[i][p+]) mp[i][p]<<=,mp[i][p+]=,flag=vis[i][p]=,ans+=mp[i][p];
  78. }
  79. }
  80. }
  81. void left(){
  82. for(int j=;j<=n;++j){
  83. for(int i=;i<=n;++i){
  84. if(mp[i][j]==) continue;
  85. int p=j-,k=mp[i][j];
  86. while(p>&&mp[i][p]==) mp[i][p]=k,mp[i][p+]=,--p;
  87. if(p!=j-) flag=;
  88. }
  89. }
  90. }
  91. void mergeright(){
  92. for(int j=n-;j>=;--j){
  93. for(int i=;i<=n;++i){
  94. if(mp[i][j]==) continue;
  95. int p=j+,k=mp[i][j];
  96. while(p<=n&&mp[i][p]==) mp[i][p]=k,mp[i][p-]=,++p;
  97. if(p!=j+) flag=;
  98. if(vis[i][p]==&&mp[i][p]==mp[i][p-]) mp[i][p]<<=,mp[i][p-]=,flag=vis[i][p]=,ans+=mp[i][p];
  99. }
  100. }
  101. }
  102. void right(){
  103. for(int j=n-;j>=;--j){
  104. for(int i=;i<=n;++i){
  105. if(mp[i][j]==) continue;
  106. int p=j+,k=mp[i][j];
  107. while(p<=n&&mp[i][p]==) mp[i][p]=k,mp[i][p-]=,++p;
  108. if(p!=j+) flag=;
  109. }
  110. }
  111. }
  112. int main(){
  113. scanf("%d%d",&n,&m);
  114. int xx1,yy1,vv1,xx2,yy2,vv2;
  115. scanf("%d%d%d%d%d%d",&xx1,&yy1,&vv1,&xx2,&yy2,&vv2);
  116. mp[xx1][yy1]=vv1,mp[xx2][yy2]=vv2;
  117. for(int i=,d,k,v;i<=m;++i){
  118. scanf("%d%d%d",&d,&k,&v);
  119. memset(vis,,sizeof(vis));
  120. flag=;
  121. if(d==) mergeup(),up();
  122. if(d==) mergedown(),down();
  123. if(d==) mergeleft(),left();
  124. if(d==) mergeright(),right();
  125. if(!flag){
  126. printf("%d\n%d\n",i-,ans);
  127. return ;
  128. }
  129. put(k%get()+,v);
  130. }
  131. printf("%d\n%d\n",m,ans);
  132. return ;
  133. }

数列:

可以证明最优答案要么是单增,要么先增后减

然后就是最长上升子序列了,好像也不太一样,都差不多

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. using namespace std;
  7. const int MAXN=1e5+;
  8. int n,a[MAXN],b[MAXN],f[MAXN],g[MAXN],mx=;
  9. int lsh[MAXN];
  10. double ans=0.0;
  11. struct BIT{
  12. int c[MAXN];
  13. int lowbit(int x){
  14. return x&(-x);
  15. }
  16. int update(int pos,int val){
  17. for(int i=pos;i<=mx;i+=lowbit(i)){
  18. c[i]=max(c[i],val);
  19. }
  20. }
  21. int query(int pos){
  22. int res=;
  23. for(int i=pos;i>;i-=lowbit(i)){
  24. res=max(res,c[i]);
  25. }
  26. return res;
  27. }
  28. }t1,t2;
  29. double max(double a,double b){
  30. return a>b?a:b;
  31. }
  32. signed main(){
  33. scanf("%lld",&n);
  34. for(int i=;i<=n;++i){
  35. scanf("%lld",&a[i]);
  36. lsh[i]=a[i];
  37. }
  38. sort(lsh+,lsh+n+);
  39. mx=unique(lsh+,lsh+n+)-lsh-;
  40. for(int i=;i<=n;++i) b[i]=lower_bound(lsh+,lsh+mx+,a[i])-lsh;
  41. for(int i=;i<=n;++i){
  42. f[i]=t1.query(b[i]-)+a[i];
  43. g[i]=t2.query(b[n-i+]-)+a[n-i+];
  44. t1.update(b[i],f[i]);
  45. t2.update(b[n-i+],g[i]);
  46. }
  47. for(int i=;i<=n;++i)
  48. ans=max(ans,max(f[i],(f[i]+g[n-i+]-a[i])/2.0));
  49. printf("%0.3lf\n",ans);
  50. return ;
  51. }

生成树:

连虚数都出来了。。。

把每一个虚数看作向量,枚举角度更新答案

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. using namespace std;
  7. const int MAXN=;
  8. const int MAXM=;
  9. int n,m,fa[MAXN];
  10. double ans=0.0,xx,yy;
  11. int find(int x){
  12. return fa[x]=(fa[x]==x?x:find(fa[x]));
  13. }
  14. struct node{
  15. int fr,to;
  16. double a,b;
  17. friend bool operator < (node p,node q){
  18. return p.a*xx+p.b*yy<q.a*xx+q.b*yy;
  19. }
  20. }e[MAXM];
  21. double kruskal(){
  22. int vala=,valb=,sum=;
  23. for(int i=;i<=n;++i) fa[i]=i;
  24. sort(e+,e+m+);
  25. for(int i=;i<=m;++i){
  26. int x=find(e[i].fr),y=find(e[i].to);
  27. if(x!=y){
  28. fa[x]=y;
  29. ++sum,vala+=e[i].a,valb+=e[i].b;
  30. if(sum==n-) break;
  31. }
  32. }
  33. return sqrt(vala*vala+valb*valb);
  34. }
  35. int main(){
  36. scanf("%d%d",&n,&m);
  37. for(int i=,u,v;i<=m;++i){
  38. double a,b;
  39. scanf("%d%d%lf%lf",&u,&v,&a,&b);
  40. e[i]=(node){u,v,a,b};
  41. }
  42. for(double i=0.0;i<=63.00;i+=0.01){
  43. xx=sin(i),yy=cos(i);
  44. ans=max(ans,kruskal());
  45. }
  46. printf("%0.6lf\n",ans);
  47. return ;
  48. }

csps模拟测试7273简单的操作小P的2048小P的单调数列小P的生成树的更多相关文章

  1. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  2. csp-s模拟测试94

    csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...

  3. csp-s模拟测试91

    csp-s模拟测试91 倒悬吃屎的一套题. $T1$认真(?)分析题意发现复杂度不能带$n$(?),计划直接维护答案,考虑操作对答案的影响,未果.突然发现可以动态开点权值线段树打部分分,后来$Tm$一 ...

  4. csp-s模拟测试60

    csp-s模拟测试60       2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...

  5. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  6. csp-s模拟测试97

    csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...

  7. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

  8. csp-s模拟测试93

    csp-s模拟测试93 自闭场. $T1$想到$CDQ$,因为复杂度少看见一个$0$打了半年还用了$sort$直接废掉,$T2$,$T3$直接自闭暴力分都没有.考场太慌了,心态不好. 02:07:34 ...

  9. csp-s模拟测试89

    csp-s模拟测试89 $T1$想了一会儿没什么思路,一看$T2$  $1e18$当场自闭打完暴力就弃了,$T3$看完题感觉要求$lca$和$dep$,手玩了一下样例发现$lca$很显然,$dep$貌 ...

随机推荐

  1. delphi基础篇之项目文件

    delphi基础篇之项目文件   program Teacher2018; uses   Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pa ...

  2. 洛谷P1860——新魔法药水

    传送门:QAQQAQ 题意:商店里有N种药水,每种药水都有一个售价和回收价.小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水.他一天可以使用K次魔法,问他一天最多赚多少钱? N<=60 ...

  3. Python3 From Zero——{最初的意识:008~初级实例演练}

    一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...

  4. 协方差及matlib绘制

    转自http://www.cnblogs.com/chaosimple/p/3182157.html 一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个 ...

  5. 通过快递100获取快递单号,结合c-lodop热敏纸打印 – 通过菜鸟ISV/自研ERP使用菜鸟电子面单

    https://www.1024cc.cn/index.php/2019/04/29/%E6%89%93%E5%8D%B0%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95/ 打 ...

  6. SPN扫描利用

    一.利用环境: 在内网渗透的信息收集中,机器服务探测一般都是通过端口扫描去做的,但是有些环境不允许这些操作.通过利用 SPN 扫描可快速定位开启了关键服务的机器,这样就不需要去扫对应服务的端口,有效规 ...

  7. await和async

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. yii2使用vendor文件夹下的的css文件

    yii2 使用 vendor 下在css样式, 可以新建一个Asset,定义 public $sourcePath="@vendor/..",如:public $sourcePat ...

  9. 关于DB9一些信号的缩写

    https://www.cnblogs.com/CCJVL/archive/2010/02/04/1663565.html 场景:PCB板子与PC通过RS232连接,以下信号的方向相对于PCB板子而言 ...

  10. thinkphp 定界符

    模板文件可以包含普通模板标签和XML模板标签,标签的定界符都可以重新配置. 大理石平台厂家 普通标签 内置模板引擎的普通模板标签默认以{ 和 } 作为开始和结束标识,并且在开始标记紧跟标签的定义,如果 ...