题目

吉老师的题时过一年还是不会做

从\(1\)号点出发经过每条边至少一次并且还要回到\(1\)号点,这跟欧拉回路的条件非常像,但是欧拉回路的实际上是"经过每一条边恰好一次并且回到出发点"

所以可以理解为将每一条边拆成多条边,使得总边权和最小,并且图中存在一条欧拉回路

而一张图存在欧拉回路的条件是不存在度数为奇数的点

换句话说,给每条边定一个经过次数\(cnt_i\),最小化\(\sum_{i=1}^mcnt_i2^i\),并且使得每个点的所连边的\(cnt\)的和为偶数

看起来不是很可做,但是这里的边都是\(2\)的次幂,这启示我们贪心

我们考虑对原图求出一棵最小生成树,这样对于每一条非树边,我们都能使得其被经过次数为\(1\)。这只需要去最小生成树上把这条非树边连接的两个点的路径都走一遍即可,因为这条路径上最大的二进制位都要小于这条非树边,所以形成的和也要小于这条边。

之后在最小生成树上做一些调整使得所有点度数都是偶数即可。

先默认所有的边的\(cnt=1\),统计出每个点的度数,之后dfs最小生成树,发现有一个点度数为奇数就让它和它父亲连接的那条边的\(cnt\)加一。可以证明,所有点的度数最后一定都会变成偶数。

代码

#include<bits/stdc++.h>
#define re register
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=5e5+5;
const int mod=998244353;
struct E{int v,nxt,w;}e[maxn<<1];
int n,m,num,ans,d[maxn],fa[maxn],head[maxn];
int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
inline int qm(int x) {return x>=mod?x-mod:x;}
inline void add(int x,int y,int w) {
e[++num].v=y;e[num].nxt=head[x];head[x]=num;e[num].w=w;
}
void dfs(int x,int fa,int p) {
for(re int i=head[x];i;i=e[i].nxt)
if(e[i].v!=fa) dfs(e[i].v,x,e[i].w);
if(d[x]&1) d[fa]^=1,ans=qm(ans+p);
}
int main() {
n=read(),m=read();
for(re int i=1;i<=n;i++) fa[i]=i;
for(re int v=1,x,y,i=1;i<=m;i++) {
d[x=read()]^=1,d[y=read()]^=1;
v=qm(v+v);ans=qm(ans+v);
int xx=find(x),yy=find(y);
if(xx==yy) continue;
fa[xx]=yy;add(x,y,v),add(y,x,v);
}
dfs(1,0,0);printf("%d\n",ans);
return 0;
}

最新文章

  1. 图片Base64编码
  2. cocos2d触碰例子代码
  3. dbca静默建库和删除库
  4. CEF3开发者系列之CEF3入门
  5. pmap
  6. rsync安装使用
  7. ios开发——实用技术篇Swift篇&amp;加速计和陀螺仪
  8. 利用gdb 调试android jni c动态库
  9. C++Primer笔记一
  10. 《A First Course in Probability》-chaper5-连续型随机变量-均匀随机变量
  11. [转]WIN7系统安装Apache 提示msvcr110.DLL
  12. 学习笔记之html5相关内容
  13. 记录下 js各种证件的正则验证
  14. leetcode — linked-list-cycle-ii
  15. 团队项目必备神器——自定义Lint
  16. Oracle-10:分析函数
  17. 在个人博客中优雅的使用Gitalk评论插件
  18. pptpd免radius限速、限连接+自由定制功能脚本
  19. Easyui datagrid 数据表格 表格列头右键菜单选择展示列 JS
  20. python 忽略警告

热门文章

  1. pefile解析PE格式
  2. 5、cesium点击面高亮事件
  3. JUC源码分析-集合篇(一)ConcurrentHashMap
  4. 某个ip段可以访问mysql
  5. leetcode.字符串.409最长回文串-Java
  6. C# WinForm控件之advTree
  7. spring_入门配置和注入
  8. 在 Keil uVision4 MDK下配置开发STM32F103Z完整教程
  9. Mongodb安装遇到的问题
  10. notepad++ remove duplicate