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

简单的操作:

考场上sb了,没看出来

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

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int MAXN=;
const int MAXM=1e5+;
int n,m,col[MAXN],tot=,ans=,bel[MAXN],res[MAXN];
int to[MAXM<<],nxt[MAXM<<],pre[MAXN],cnt=;
void add(int u,int v){
++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt;
}
bool dfs(int x,int c){
col[x]=c,bel[x]=tot;
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(col[y]==c) return ;
else if((!col[y])&&(!dfs(y,-c))) return ;
}
return ;
}
int dis[MAXN];
void bfs(int st){
memset(dis,,sizeof(dis));
queue<int>q;
dis[st]=;
q.push(st);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(dis[y]==){
dis[y]=dis[x]+;
q.push(y);
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=,u,v;i<=m;++i){
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
for(int i=;i<=n;++i){
if(!col[i]){
++tot;
if(!dfs(i,)){
ans=-;
break;
}
}
}
if(ans==-){
printf("%d\n",ans);
return ;
}
for(int i=;i<=n;++i){
bfs(i);
for(int j=;j<=n;++j){
res[bel[i]]=max(res[bel[i]],dis[j]-);
}
}
for(int i=;i<=tot;++i){
ans+=res[i];
}
printf("%d\n",ans);
return ;
}

2048:

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

就是模拟

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,mp[][],ans=;
bool flag=,vis[][];
int get(){
int res=;
for(int i=;i<=n;++i){
for(int j=;j<=n;++j)
res+=(mp[i][j]==);
}
return res;
}
void put(int pos,int val){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
if(mp[i][j]!=) continue;
--pos;
if(pos==){
mp[i][j]=val;
return ;
}
}
}
}
void mergeup(){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
if(mp[i][j]==) continue;
int p=i-,k=mp[i][j];
while(p>&&mp[p][j]==) mp[p][j]=k,mp[p+][j]=,--p;
if(p!=i-) flag=;
if(vis[p][j]==&&mp[p+][j]==mp[p][j]) mp[p][j]<<=,mp[p+][j]=,flag=vis[p][j]=,ans+=mp[p][j];
}
}
}
void up(){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
if(mp[i][j]==) continue;
int p=i-,k=mp[i][j];
while(p>&&mp[p][j]==) mp[p][j]=k,mp[p+][j]=,--p;
if(p!=i-) flag=;
}
}
}
void mergedown(){
for(int i=n-;i>=;--i){
for(int j=;j<=n;++j){
if(mp[i][j]==) continue;
int p=i+,k=mp[i][j];
while(p<=n&&mp[p][j]==) mp[p][j]=k,mp[p-][j]=,++p;
if(p!=i+) flag=;
if(vis[p][j]==&&mp[p-][j]==mp[p][j]) mp[p][j]<<=,mp[p-][j]=,flag=vis[p][j]=,ans+=mp[p][j];
}
}
}
void down(){
for(int i=n-;i>=;--i){
for(int j=;j<=n;++j){
if(mp[i][j]==) continue;
int p=i+,k=mp[i][j];
while(p<=n&&mp[p][j]==) mp[p][j]=k,mp[p-][j]=,++p;
if(p!=i+) flag=;
}
}
}
void mergeleft(){
for(int j=;j<=n;++j){
for(int i=;i<=n;++i){
if(mp[i][j]==) continue;
int p=j-,k=mp[i][j];
while(p>&&mp[i][p]==) mp[i][p]=k,mp[i][p+]=,--p;
if(p!=j-) flag=;
if(vis[i][p]==&&mp[i][p]==mp[i][p+]) mp[i][p]<<=,mp[i][p+]=,flag=vis[i][p]=,ans+=mp[i][p];
}
}
}
void left(){
for(int j=;j<=n;++j){
for(int i=;i<=n;++i){
if(mp[i][j]==) continue;
int p=j-,k=mp[i][j];
while(p>&&mp[i][p]==) mp[i][p]=k,mp[i][p+]=,--p;
if(p!=j-) flag=;
}
}
}
void mergeright(){
for(int j=n-;j>=;--j){
for(int i=;i<=n;++i){
if(mp[i][j]==) continue;
int p=j+,k=mp[i][j];
while(p<=n&&mp[i][p]==) mp[i][p]=k,mp[i][p-]=,++p;
if(p!=j+) flag=;
if(vis[i][p]==&&mp[i][p]==mp[i][p-]) mp[i][p]<<=,mp[i][p-]=,flag=vis[i][p]=,ans+=mp[i][p];
}
}
}
void right(){
for(int j=n-;j>=;--j){
for(int i=;i<=n;++i){
if(mp[i][j]==) continue;
int p=j+,k=mp[i][j];
while(p<=n&&mp[i][p]==) mp[i][p]=k,mp[i][p-]=,++p;
if(p!=j+) flag=;
}
}
}
int main(){
scanf("%d%d",&n,&m);
int xx1,yy1,vv1,xx2,yy2,vv2;
scanf("%d%d%d%d%d%d",&xx1,&yy1,&vv1,&xx2,&yy2,&vv2);
mp[xx1][yy1]=vv1,mp[xx2][yy2]=vv2;
for(int i=,d,k,v;i<=m;++i){
scanf("%d%d%d",&d,&k,&v);
memset(vis,,sizeof(vis));
flag=;
if(d==) mergeup(),up();
if(d==) mergedown(),down();
if(d==) mergeleft(),left();
if(d==) mergeright(),right();
if(!flag){
printf("%d\n%d\n",i-,ans);
return ;
}
put(k%get()+,v);
}
printf("%d\n%d\n",m,ans);
return ;
}

数列:

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

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

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e5+;
int n,a[MAXN],b[MAXN],f[MAXN],g[MAXN],mx=;
int lsh[MAXN];
double ans=0.0;
struct BIT{
int c[MAXN];
int lowbit(int x){
return x&(-x);
}
int update(int pos,int val){
for(int i=pos;i<=mx;i+=lowbit(i)){
c[i]=max(c[i],val);
}
}
int query(int pos){
int res=;
for(int i=pos;i>;i-=lowbit(i)){
res=max(res,c[i]);
}
return res;
}
}t1,t2;
double max(double a,double b){
return a>b?a:b;
}
signed main(){
scanf("%lld",&n);
for(int i=;i<=n;++i){
scanf("%lld",&a[i]);
lsh[i]=a[i];
}
sort(lsh+,lsh+n+);
mx=unique(lsh+,lsh+n+)-lsh-;
for(int i=;i<=n;++i) b[i]=lower_bound(lsh+,lsh+mx+,a[i])-lsh;
for(int i=;i<=n;++i){
f[i]=t1.query(b[i]-)+a[i];
g[i]=t2.query(b[n-i+]-)+a[n-i+];
t1.update(b[i],f[i]);
t2.update(b[n-i+],g[i]);
}
for(int i=;i<=n;++i)
ans=max(ans,max(f[i],(f[i]+g[n-i+]-a[i])/2.0));
printf("%0.3lf\n",ans);
return ;
}

生成树:

连虚数都出来了。。。

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

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=;
const int MAXM=;
int n,m,fa[MAXN];
double ans=0.0,xx,yy;
int find(int x){
return fa[x]=(fa[x]==x?x:find(fa[x]));
}
struct node{
int fr,to;
double a,b;
friend bool operator < (node p,node q){
return p.a*xx+p.b*yy<q.a*xx+q.b*yy;
}
}e[MAXM];
double kruskal(){
int vala=,valb=,sum=;
for(int i=;i<=n;++i) fa[i]=i;
sort(e+,e+m+);
for(int i=;i<=m;++i){
int x=find(e[i].fr),y=find(e[i].to);
if(x!=y){
fa[x]=y;
++sum,vala+=e[i].a,valb+=e[i].b;
if(sum==n-) break;
}
}
return sqrt(vala*vala+valb*valb);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=,u,v;i<=m;++i){
double a,b;
scanf("%d%d%lf%lf",&u,&v,&a,&b);
e[i]=(node){u,v,a,b};
}
for(double i=0.0;i<=63.00;i+=0.01){
xx=sin(i),yy=cos(i);
ans=max(ans,kruskal());
}
printf("%0.6lf\n",ans);
return ;
}

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. maven-version

    <java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.bu ...

  2. Tomcat下载部署及解决中文乱码显示

    一.下载 tomcat下载链接:https://tomcat.apache.org/ 1.进入tomcat官网后,我使用的是tomcat9,所以我选择tomcat9.然后点击core下的zip包下载. ...

  3. 推荐5本纯Java技术书,你看过几本?

    51小长假了,大家应该对它又爱又痛,爱的是终于可以到处浪了,痛的是没钱只能穷游,而且还到处都是人,结果变成了堵高速.去看人头.去蒸饺子,真是受罪啊.. 所以,对于小长假的痛,我相信还是有一部分人会选择 ...

  4. SpringIOC中的注解配置

    Spring中的注解是个好东西,可以简化我们的操作,但是使用了注解又会在一定的程度上增加程序的耦合度,xml中的配置写在了类中虽然简化了开发过程,但是或多或少的违背了开闭原则.所以在开发过程中要先明确 ...

  5. LA 3263 /// 欧拉定理 oj21860

    题目大意: n个端点的一笔画 第n个和第1个重合 即一笔画必定是闭合曲线 输出平面被分成的区域数 欧拉定理 V+F-E=2 即 点数+面数-边数=2 (这里的面数包括了外部) #include < ...

  6. Unity中DoTween的使用

    在Unity手游开发中,经常用到插值运算,我们可以使用Mathf.Lerp自行去实现效果,但是使用插件提高了我们的开发效率,这里归结一下DoTween的基本使用方式以及效果说明: 直接代码: usin ...

  7. 使用kubeadm安装kubernetes 1.15

    1.主机准备篇 使用vmware Workstation 10创建一台虚拟机,配置为2C/2G/50G,操作系统为CentOS Linux release 7.6.1810 (Core). IP地址为 ...

  8. C#学习笔记----反射基础

    反射基础 反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的类,接口,字段,属性,方法, ...

  9. opencv3.1.0 在控制台程序中报错:winnt.h(6464): error C2872: ACCESS_MASK: 不明确的

    在winnt.h里面有一个cv的命名空间,同样定义了一个ACCESS_MASK,跟opencv的cv::ACCESS_MASK发生了冲突!!! 该冲突在MFC中没有出现,在控制台程序中才会报错!对于o ...

  10. CSIC_716_20191104【流程控制语句】

    流程控制语句 if 语法结构 if 逻辑判断为真 : xxxxxx else: xxxxx while 语法结构  (continue.break) while 逻辑判断为真: xxxxxxx con ...