E94 Tarjan边双缩点+树形DP P8867 [NOIP2022] 建造军营

news/2025/1/7 17:57:02/文章来源:https://www.cnblogs.com/dx123/p/18651770

视频链接:

 

 

P8867 [NOIP2022] 建造军营 - 洛谷 | 计算机科学教育新生态

// Tarjan边双缩点+树形DP O(n)
#include<bits/stdc++.h>
using namespace std;int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
const int N=500010,M=2000010,mod=1e9+7;
int n,m;
int head[N],ne[M],fr[M],to[M],idx=1;
void add(int x,int y){fr[++idx]=x;to[idx]=y;ne[idx]=head[x];head[x]=idx;
}
vector<int> e[N];
stack<int> s;
int dfn[N],low[N],tim,dcc[N],sum[N],cnt,bri[M],siz[N];
long long f[N][2],pw[M],ans;void tarjan(int x,int ine){dfn[x]=low[x]=++tim; s.push(x);for(int i=head[x];i;i=ne[i]){int y=to[i];if(!dfn[y]){tarjan(y,i);low[x]=min(low[x],low[y]);if(dfn[x]<low[y]) bri[i]=bri[i^1]=1;}else if(i!=(ine^1))low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){++cnt;while(1){int y=s.top();s.pop();dcc[y]=cnt;++sum[cnt];if(y==x)break;}}
}
void dfs(int x,int fa){siz[x]=1;f[x][0]=1; f[x][1]=pw[sum[x]]-1;for(int y:e[x]){if(y==fa) continue;dfs(y,x);siz[x]+=siz[y];f[x][1]=(f[x][1]*f[y][0]*2%mod+f[x][1]*f[y][1]%mod+f[x][0]*f[y][1]%mod)%mod;f[x][0]=f[x][0]*f[y][0]*2%mod;}if(x==1) siz[x]--;ans=(ans+f[x][1]*pw[m-siz[x]])%mod;
}
int main(){n=read();m=read();for(int i=1;i<=m;++i){ //建图int x=read(),y=read();add(x,y);add(y,x);}tarjan(1,0); //缩点for(int i=2;i<=idx;++i) //建树if(bri[i])e[dcc[fr[i]]].push_back(dcc[to[i]]);pw[0]=1;for(int i=1;i<M/2;++i) pw[i]=pw[i-1]*2%mod;dfs(1,0); //DPcout<<ans;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864905.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夸克网盘批量分享工具

该工具是一款可以批量转存夸克网盘文件并且批量分享夸克网盘文件的一个工具,使用易语言编写,能够快速分享转存夸克网盘文件。 使用教程 浏览器开启F12抓包,在个人夸克主页刷新,提取Cookie将Cookie填入软件,点击登录,然后双击选择目录,到想要分享的目录点击批量分享,最后…

《重构:改善既有代码的设计(第2版)》PDF、EPUB免费下载

本书是经典著作《重构》出版20年后的更新版。书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了60多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助开发人…

C# AIModelRouter:使用不同的AI模型完成不同的任务

https://www.cnblogs.com/mingupupu/p/18654982 AIModelRouter AI模型路由,模型的能力有大小之分,有些简单任务,能力小一点的模型也能很好地完成,而有些比较难的或者希望模型做得更好的,则可以选择能力强的模型。为什么要这样做呢?可以降低AI模型的使用成本,毕竟能力强的…

使用Windows批处理命令批量上传jar到Nexus(maven私服)中

这里就不介绍nexus的搭建了;网上很多都是.sh脚本,linux比较合适,当然用git也可以运行;但是.bat文件肯定是所有windows系统都是可以执行的;所以这里介绍一下用windows的批处理命令来编写; 首先,你得先确定的仓库状态是处于Allow redeploy状态;新建一个文件mavenimport.b…

第七届封神台CTF

没事,学习了一下第七届封神台CTF Web welcome_to_zkaqctf ​​ 源码: const {promises: fs} = require(fs); const fastify = require(fastify);const flag = process.env.FLAG || zkaq{do_you_believe_this_is_flag?};const app = fastify(); app.get(/, async (_, res) =&…

Activiti 手工新增历史环节20250116

手工新增(历史任务表)act_hi_taskinst,其实这个表记录加一条就可以 注:字段2值为空,字段值10为空,字段11、12 值都要加-----act_hi_taskinst.PROC_DEF_ID myProcess:34:400000000000736-----act_hi_taskinst.PROC_INST_ID_ 400000000000496SELECT * FROM "act_hi_…

SQL语言做加减运算时将某项的null值转换为0

在SQL语言中,很多时候,在表项中会遇到null值,null值有三大特点:1)NULL值不参加统计;2)NULL值不进入计算表达式;3)不能与其它值进行比较。 因此,在运算中要将null值有时候转换成其他值,这里提供一种加减运算中转换为0的方法。 如:在算工资的时候,总工资=基础工资+奖…

中电金信携手华为发布“全链路实时营销解决方案”,重塑金融营销数智新生态

在数智化转型成为驱动经济社会高质量发展的新引擎背景下,“数智方案”栏目聚焦金融等国计民生重点行业场景,依托中电金信“源启筑基+咨询引领+应用重构”的产品及服务体系,输出市场洞察和行业解决方案、应用案例,旨在全面推动行业IT架构升级、数智化转型。数智驱动是金融机…

实时协作:如何通过协作文档提升团队生产力

在当今快节奏的工作环境中,团队协作的效率直接决定了项目的成败。然而,文档管理作为协作的核心环节,却常常成为效率的“隐形杀手”。无论是版本混乱、信息丢失,还是沟通不畅,这些问题都在无形中消耗着团队的时间和精力。而协作文档工具的出现,正是为了解决这些痛点,彻底…

win10重装如何跳过微软账号直接设置本地帐户.221111

​在添加你的帐户界面,选择脱机帐户2. 第二个页面,选择有限的体验3. 第三个页面,设置自己本地的用户名4. 第四个页面,设置自己本地的密码.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; paddin…

看板软件在利益相关者期望管理中的应用与探索

制定一个有效的利益相关者期望管理计划需要全面识别利益相关者、深入分析他们的期望、制定期望管理策略、制定详细的期望管理计划、实施与调整期望管理计划以及建立绩效评估机制。通过这些步骤,你可以确保项目目标与利益相关者的期望保持一致,提高项目的成功率和满意度。制定…

centos7安装docker.240103

​1. installDocker.sh ,然后自行安装 安装所需资源包 sudo yum install -y yum-utils 设置docker下载地址 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装docker sudo yum install docker-ce -y docker-ce-cli conta…