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

表达式密码:

是个水题。。。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=1e5+;
int len,fh=;
char s[MAXN];
signed main(){
//freopen("expression.in","r",stdin);
//freopen("i.out","w",stdout);
scanf("%s",s+);
len=strlen(s+);
s[len+]='?';
if(s[]=='-') fh=;
else fh=;
for(int i=;i<=len;){
while(i<=len&&s[i]<''||s[i]>'') ++i;
if(fh==){
putchar('-');
putchar(s[i]);
++i;
if(s[i]=='-') fh=;
else fh=;
}else{
while(i<=len&&s[i]==''){
putchar('+');
putchar('');
++i;
}
if(s[i]=='-') fh=;
else if(s[i]=='+') fh=;
else if(s[i]!='?'){
if(i!=) putchar('+');
while(i<=len&&s[i]>=''&&s[i]<=''){
putchar(s[i]);
++i;
}
if(s[i]=='-') fh=;
else fh=;
}
}
}
puts("");
return ;
}

电压机制:

题目翻译:在一张无向图上,有多少边满足:在所有的奇环上但是不再任何一个偶环上

题目给了基环树的数据,启发我们想到正解

如过那个环是偶环,那么答案就是环外的,如果是奇环,答案就是环内的

考虑如何拓展到一般情况

我们dfs时会建出一个搜索树,我们把新树建出来,同时记录每一条边是否为树边

然后扫每一个不是树边的边,如果把它加进新图,就会形成环,因为是在树上,lca,两点间dis很好求,所以我们知道加入这条边会形成奇环还是偶环

暴力排除每一条边显然不可能,我们考虑差分

把每一条边放到点,统计每一个点被多少个奇环或偶环经过,打差分,最后dfs一遍就统计出了一个点在几个奇环,几个偶环中了

然后就统计出答案了,注意根节点不要统计,因为把边放到点,没有边被放到了根节点

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define re register
using namespace std;
const int MAXN=1e5+5;
int n,m,ans=0,f[MAXN],g[MAXN],tot=0;
int to[MAXN<<1],nxt[MAXN<<1],id[MAXN<<1],pre[MAXN],cnt=0;
struct node{
int u,v;
bool flag;//shifoushishubian
}e[MAXN<<1];
inline void add(re int u,re int v){
++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt;
}
int fa[MAXN];
inline int find(re int x){
return fa[x]=(fa[x]==x?x:find(fa[x]));
}
int deep[MAXN],siz[MAXN],son[MAXN];
inline void dfs(re int x){
siz[x]=1;
for(re int i=pre[x];i;i=nxt[i]){
re int y=to[i];
if(y==fa[x]) continue;
fa[y]=x;deep[y]=deep[x]+1;
dfs(y);
siz[x]+=siz[y];
if(siz[son[x]]<siz[y]) son[x]=y;
}
}
int top[MAXN];
inline void DFS(re int x,re int topf){
top[x]=topf;
if(son[x]) DFS(son[x],topf);
for(re int i=pre[x];i;i=nxt[i]){
re int y=to[i];
if(y==fa[x]||y==son[x]) continue;
DFS(y,y);
}
}
inline int LCA(re int x,re int y){
while(top[x]!=top[y]){
if(deep[top[x]]<deep[top[y]]) swap(x,y);
x=fa[x];
}
if(deep[x]>deep[y]) swap(x,y);
return x;
}
bool vis[MAXN];
void dfs1(int x,int rt){
vis[x]=1;
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(y==fa[x]) continue;
dfs1(y,rt);
g[x]+=g[y],f[x]+=f[y];
}
if(f[x]==tot&&g[x]==0&&x!=rt) ++ans;
}
signed main(){
scanf("%d%d",&n,&m);
for(re int i=1;i<=n;++i) fa[i]=i;
for(re int i=1,u,v;i<=m;++i){
scanf("%d%d",&u,&v);
e[i]=(node){u,v,0};
}
re int num=0;
for(re int i=1;i<=m;++i){
re int x=find(e[i].u),y=find(e[i].v);
if(x!=y){
fa[x]=y;
add(e[i].u,e[i].v),add(e[i].v,e[i].u);
e[i].flag=1;
++num;
if(num==n-1) break;
}
}
memset(fa,0,sizeof(fa));
for(int i=1;i<=n;++i){
if(deep[i]) continue;
deep[i]=1;
dfs(i),DFS(i,i);
}
for(re int i=1;i<=m;++i){
if(e[i].flag) continue;
re int x=e[i].u,y=e[i].v;
re int lca=LCA(x,y);
re int dis=deep[x]+deep[y]-deep[lca]*2;
if(dis&1){//ouhuan
++g[x],++g[y],g[lca]-=2;
}else{
++tot;
++f[x],++f[y],f[lca]-=2;
}
}
for(int i=1;i<=n;++i){
if(vis[i]) continue;
dfs1(i,i);
}
if(tot==1) ++ans;
printf("%d\n",ans);
return 0;
}
 

括号密码:不会

csps模拟85表达式密码,电压机制,括号密码题解的更多相关文章

  1. [CSP-S模拟测试]:表达式密码(模拟)

    题目传送门(内部题87) 输入格式 从文件$expression.in$中读入数据.输入一行,一个字符串$S$,表示原表达式,保证为合法表达式 输出格式 输出到文件$expression.out$中. ...

  2. CSPS模拟 85

    WWB大佬的bitset映射真是太强了! %%% T1 观察样例,猜规律. T2 对题目的翻译工作用了很长时间 翻译错了好几次.. 观察到奇环没法染色,选的边必须把奇环弄断 如果在偶环上,偶环就变得没 ...

  3. csps模拟92数列,数对,最小距离题解

    题面:https://www.cnblogs.com/Juve/articles/11767225.html 数列: 简化题意:已知a,b,c,求满足$a*x+b*y=c$的$x+y$最小值 然后ex ...

  4. csp-s模拟65Simple,Walk, Travel,棋盘题解

    题面:https://www.cnblogs.com/Juve/articles/11639923.html simple: 考试时只想到的暴力exgcd判断 考虑n,m互质的情况: 我们枚举y,对于 ...

  5. csp-s模拟测试55 联,赛,题题解

    题面:https://www.cnblogs.com/Juve/articles/11610969.html 联: 用线段树维护区间和,要修改成1或0就线段树修改区间和 如果是异或,那么新的区间和就是 ...

  6. [CSP-S模拟测试]:括号密码(贪心)

    题目描述 在“无限神机”的核心上,有一个奇怪的括号密码,密码初始已经有一个括号序列,有$n$个限制条件,每个限制条件描述为$l_i$和$r_i$,表示区间$[l_i,r_i]$的括号序列必须合法.调整 ...

  7. csp-s模拟测试85

    csp-s模拟测试85 $T1$全场秒切没有什么区分度,$T2$全场成功转化题意但是我并不会打,$T3$暴力都没打很遗憾. 100 00:21:49 02:56:35 02:56:49 135 02: ...

  8. 【例题收藏】◇例题·6◇ 电压机制(voltage)

    ◆例题·6◆ 电压机制 周六日常模拟赛……已经不知道该说什么了(感觉做不出来的都是好题) ▷ 题目 (终于不用自己翻译英文题了╮(╯-╰)╭) [问题描述] 科学家在“无限神机”(Infinity M ...

  9. csp-s模拟测试83(集训过半)

    csp-s模拟测试83(集训过半) 一场信心赛.起初$OJ$爆了我就看见全场$A$了$T1$并且夹杂着$A$掉$T2$我就很难受. 这场比赛没有深入思考,很失败,一个多小时后就结束了我罪恶的一生. 0 ...

随机推荐

  1. Java生产环境下性能监控与调优详解

    1:JVM字节码指令与 javapjavap <options> <classes>cd monitor_tuning/target/classes/org/alanhou/m ...

  2. 《代码大全2》读书笔记 Week2

    <代码大全2>第四.五章 第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率.作为一种表达工具,编 ...

  3. Flask理论基础(一)视图函数和URL反转函数(url_for)

    一.视图函数 1.1 基本用法试图函数是 app.route 或者 bp.route(蓝图)装饰器装饰的函数.该函数实现了对URL路径的转换,也就是路由功能,例如下面代码定义了默认url ‘/’ 和‘ ...

  4. js实现各种复制功能

    引用: <script src="https://clipboardjs.com//dist/clipboard.min.js"></script> 示例1 ...

  5. Linux 中 sqlite3 基本操作

    https://www.runoob.com/sqlite/sqlite-commands.html 一 .linux 下安装数据库和创建一个数据库 1. Linux 下安装sqlite3 需要两个命 ...

  6. CentOS7.6下安装Oracle JDK

    注:本教程使用XShell ssh到CentOS服务器,并使用root用户登录,如使用其他普通用户登录,请在命令前加sudo 1).在/usr/local/目录下(看个人情况)新建文件夹java用来存 ...

  7. java ThreadPoolExecutor 异常捕获

    一,创建一个线程池 其中: public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) 饱和策略执行时的具体逻辑. p ...

  8. eclipse创建MAVEN项目是出现Could not resolve archetype的解决办法

    eclipse第一次创建MAVEN项目时出现这个问题,查了很多文档改了没用,后来问了别人知道是maven中央仓库下载插件包失败就会报错. 解决办法: 用国内阿里云镜像会好很多 在settings.xm ...

  9. git删除远程服务的文件夹

    首先查看当前分支:git branch -a 删除缓存的idea:git rm --cached -r .idea 提交gitiginore文件,将.idea从源代码仓库中删除(-m 表示注解):   ...

  10. Redis探索之路(三):Redis的五种数据类型String和Hash

    一:String 存储二进制数据,可以图片,序列化对象 GET,SET SETNX(not exist)  setnx age 33 返回 0,1 SETEX设置有效期   SETEX COLOR 2 ...