AtCoder ABC 222E
时间:2021-10-10
本文章向大家介绍AtCoder ABC 222E,主要包括AtCoder ABC 222E使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析
首先,我们可通过DFS处理出来,在沿着a数组给的顺序走时,每条边都经过了多少次。我们假设第i
条边被经过的次数为\(c_i\)次,则问题可以转化为,从\(c_1,c_2...c_{n-1}\)中,分成两部分,使得一部分构成R,一部分构成B,从而使得R-B=K?我们设S=\(c_1+c_2+...+c_{n-1}\),而又因为R+B=S,因此我们可以解出
\[R=\frac{S+K}{2}
\]
因此,问题在此进行传化,从\(c_1,c_2...c_{n-1}\)中,挑选出一部分数,使得其和为\(\frac{S+K}{2}\)?
问题到这里,已经很明显了,01背包计数问题
但有一些细节需要处理,当S+K是奇数的时候,是无解的,同时S+K是负数也无解。
接下来就是01计数背包
\[f[i][j]=从c_1,c_2...,c_i中选择和为j的方案数
\]
AcCode
#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x" ----> "<<x<<endl
using namespace std;
const int N = 1010,M=N*2,INF = 0x3f3f3f3f,mod=998244353;
const double eps = 1e-10;
const double pi = acos(-1.0);
typedef pair<int, int> PII ;
typedef pair<double,double> PDD;
typedef long long LL;
int h[N],e[M],ne[M],idx;
int cnt[N];
int w[N];
int dp[100001];
int n,m,k;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool dfs(int u,int fa,int end)
{
if(u==end) return 1;
for(int i=h[u];~i;i=ne[i])
{
int j = e[i];
if(j==fa) continue;
if(dfs(j,u,end))
{
cnt[i/2]++;
return 1;
}
}
return 0;
}
void solve() {
memset(h,-1,sizeof h);
idx=0;
cin>>n>>m>>k;
for(int i=0;i<m;i++) cin>>w[i];
for(int i=0;i<n-1;i++)
{
int u,v;
cin>>u>>v;
add(u,v),add(v,u);
}
for(int i=0;i<m-1;i++) dfs(w[i],-1,w[i+1]);
int s = 0;
for(int i=0;i<n-1;i++) s+=cnt[i];
if((s+k)%2||s+k<0)
{
cout<<0<<endl;
return ;
}
dp[0]=1;
for(int i=0;i<n-1;i++)
for(int x=100000;x>=cnt[i];x--)
dp[x]=(LL)(dp[x]+dp[x-cnt[i]])%mod;
cout << dp[(s+k)/2]<<endl;
}
int main()
{
int t=1;
while(t -- ) {
solve();
}
return 0;
}
原文地址:https://www.cnblogs.com/aitejiu/p/15388695.html
- Go包管理的探索与实践
- 机器学习优化算法之爬山算法小结
- 机器学习之最小二乘法
- Go中的同步与锁
- 机器学习之KNN算法思想及其实现
- 机器学习之决策树熵&信息增量求解算法实现
- 朴素贝叶斯分类器(离散型)算法实现(一)
- spring设置全局异常处理器
- discuz论坛apache日志hadoop大数据分析项目:hive以及hbase是如何入库以及代码实现
- 【Golang语言社区】前端编程- 从零开始开发一款H5小游戏(一) 重温canvas的基础用法
- 今天聊聊分布式锁 No.86
- 【JS游戏编程基础】关于js里的this关键字的理解
- 【算法】随机森林算法
- 【Golang语言社区--H5编程】smoke.js
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 数据分析(四):Pandas 进阶
- 用 Python 写一个颜值测试小工具
- 当 Python 遇到微信
- CenterNet之loss计算代码解析
- 爬取林丹和赵雅淇的微博评论,看看网友都说了些什么
- 静默安装单机Oracle数据库软件
- 如何用 Python 生成炫酷二维码
- 一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关
- Python 函数为什么会默认返回 None?
- 潘粤明的《龙岭迷窟》到底怎么样?我用 Python 得出了一些结论!
- [译]按照EIP-712规范签名完成委托和投票
- 更好Solidity合约调试工具: console.log
- 发现了合自己胃口的公众号,但文章太多翻来翻去真麻烦,还好我学了 Python
- 用 Python 下载抖音无水印视频
- 《民国奇探》的弹幕有点逗比,用 Python 爬下来看看