UOJ #138. 【UER #3】开学前的涂鸦
Description
红包是一个有艺术细胞的男孩子。
红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦。
一开始,他在纸上画了一棵 n 个节点的树。但是他觉得这样的画太简单了,体现不出他高超的绘画功底,于是他又额外画上了 k 条边。
然而他觉得这样画面太复杂,于是想删去一些边使得这个无向图仍然是连通的。
请帮红包求出删边的方案数。两个方案被认为是不同的当且仅当存在一条边在其中一组中被删而另一组中没有。(什么边都不删也算一种方案)
Solution
首先发现可能被删除的边一定是在环上的,如果我们构出一棵树来,那么剩下的非树边一定都是反祖边,并且反祖边的条数不超过 \(10\)
用 \(Dzy Loves Chinese II\) 的方法做,我们给所有非树边一个权值,然后把跨过的树边都异或上这个权值(树上差分实现就好了)
那么不连通的情况就是存在一个子集异或和为 \(0\).
但是边树太多了不好枚举,我们缩边:把权值相同的一条链缩为以条边,这条边权值 \(w\) 为与它相同相同的边的数目(删这条边有 \(w\) 种选择),缩点后的树的一种方案对应原图中 \(\Pi w_i\) 中方案
缩完之后的边不会很大,具体数字和证明见 \(UOJ\) 题解,大约是一个 \(bell\) 数
然后在一边搜索的时候用一边用线性基判掉不合法的方案就行了
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+50,mod=998244353;
int head[N],nxt[N*2],to[N*2],num=1,n,m,dep[N],st[N],top=0,w[N],cnt=0;
inline void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;}
inline void dfs(int x,int last){
for(int i=head[x];i;i=nxt[i]){
if(i==last)continue;
int u=to[i];
if(!dep[u]){
dep[u]=dep[x]+1;dfs(u,i^1);w[x]^=w[u];
if(w[u])st[++top]=w[u];
}
else if(dep[u]<dep[x]){
w[x]^=1<<cnt;w[u]^=1<<cnt;
st[++top]=(1<<cnt++);
}
}
}
int b[1005][15],ans=0;
struct data{int w,v;}e[N];
inline void bfs(int x,int t){
if(x==cnt+1){
ans=(ans+t)%mod;
return ;
}
memcpy(b[x],b[x-1],sizeof(b[x]));
bfs(x+1,t);
for(int i=10,c=e[x].w;i>=0;i--){
if(!(c>>i&1))continue;
if(!b[x][i]){b[x][i]=c;break;}
else c^=b[x][i];
if(!c)return ;
}
bfs(x+1,1ll*t*e[x].v%mod);
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
int x,y;
scanf("%d%d",&n,&m);m=n+m-1;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
link(x,y);link(y,x);
}
dep[1]=1;dfs(1,1);
sort(st+1,st+top+1);cnt=0;
for(int i=1,t=1;i<=top;i++,t++)
if(i==top || st[i]!=st[i+1])e[++cnt]=(data){st[i],t},t=0;
bfs(1,1);
printf("%d\n",ans);
return 0;
}
UOJ #138. 【UER #3】开学前的涂鸦的更多相关文章
- 【线性基 集合hash】uoj#138. 【UER #3】开学前的涂鸦
还需要加强分析题目特殊性质,设计对应特殊算法,少想多写大力dfs剪枝不要管MLETLE直接上的能力 红包是一个有艺术细胞的男孩子. 红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦. ...
- UOJ136 开学前的作文
描述 红包是一个萌萌的男孩子. 红包由于 NOI 惨挂,直到前不久依然无心写作业.如今快开学了,他决定好好完成作业. 对于可以交电子稿的作文,红包有特殊的完成技巧,大致流程是依次选中一段内容→按下 C ...
- UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- 第138天:Web前端面试题总结(编程)
1.如何让一个盒子水平垂直居中 //已知宽高 <div class="div1"></div> <style> .div1{ width:400 ...
- ZJOI2019Round#1
考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗 ...
- 从微软MVP到女儿开学--2017前半年小结
2017年转眼就到了9月,原本在年初定的计划基本泡汤了. 看书啊减肥啊出教程啊,都被因为各种事物给缠身而没有完成. 1号带女儿去报名的时候,听到老师说"家长们请到这边来集合"的时候 ...
- 我们应当怎样学习HTML和CSS
目标读者:web前端小白.大神请绕路 学习一门新技术,应当找一本经典入门书,在两三天之内快速翻阅完毕,了解其概貌. 然后再制定一个学习路线图(这个路线图绝大多数情况下非书本目录的顺序),接着遵循学习路 ...
- 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶
第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...
随机推荐
- Spring学习(三)——集成 Velocity
上篇文章http://www.cnblogs.com/wenjingu/p/3822989.html我们使用Gradle构建了一个简单的Spring MVC Web应用程序, 本篇将在上篇的基础上将j ...
- ajax 多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题
多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题 浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉.当我们执行异步ajax的时候没有问 ...
- 项目前端打包工具从 NEJ 切换成 webpack
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 这里不讨论 NEJ 和 webpack 的优劣,仅从技术角度来探寻一下能否实现,以及实现的代价. 前言 上一篇 ...
- 如何安全地运行用户的 JavaScript 脚本
本文来自网易云社区,转载务必请注明出处. 有时候我们需要运行用户输入的 JavaScript 脚本(以下简称脚本).对于我们来说,这些脚本是不可信任的,如果在当前的 Context 中运行这些脚本,它 ...
- ie7间隙问题
正常浏览器显示,如谷歌浏览器: ie7浏览器效果如图: html代码: <ul> <li class="current"><a href=" ...
- “全栈2019”Java第十九章:关系运算符、条件运算符和三元运算符
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 模拟RHCSA考试环境
转载自 http://blog.51cto.com/10681635/2084794 模拟RHCSA考试环境 第1章 修改 root 密码 第2章 配置网络 第3章 设定SeLinux 第4章 ...
- [Maven实战-许晓斌]-[第二章]-2.7-2.8 Mave安装的最优建议和安装小结
2.7
- 洛谷P5265 【模板】多项式反三角函数
题面 传送门 题解 我数学好像学得太差了 据说根据反三角函数求导公式 \[{d\over dx}\arcsin x={1\over \sqrt{1-x^2}}\] \[{d\over dx}\arct ...
- PHP将多维数组变成一维数组
function reduceArray($array) { $return = []; array_walk_recursive($array, function ($x) use (&$r ...