\(qwq\)首先,这些题对于我而言……类似于\(emmm\)洪水猛兽

\(\mathcal{Day \ \ 1}\)

T1

\(\mathcal{\color{red}{Description}}\)

作为钦钦草原最绿的男人,杨某针每天都要开车巡视钦钦草原一圈。钦钦草原由 \(n\) 个城市组成, \(m\) 条双向道路连接着它们。经过第 \(i\) 条道路要花费的

时间是 \(2^i\)。

杨某针想要经过每条道路至少一次,在此基础上他想最小化他花费的时间。但作为曾经 \(CTSC\) 的 \(Cu\) 选手,他并不能很快地计算出这个问题。所以他向你求助。

【输入格式】

从文件 \(carcar.in\) 中读入数据。

输入第一行包含两个正整数 \(n, m\)。

接下来 \(m\) 行,每行两个正整数 \(a_i, b_i\),表示第 \(i\) 条边连接点 \(a_i\) 和 \(b_i\),它的权值为 \(2^i\)。

保证 \(a_i ,b_i\),不存在重边,且任意两个点之间可以互相到达。

【输出格式】

输出到文件 \(carcar.out\) 中。

输出一行一个整数,表示答案对 \(10^9 + 7\) 取模的值。

\(\mathcal{\color{red}{Solution}}\)

首先我们要认识到,这个题类似于求一个欧拉路这么一个东西。但是要求遍历所有的边并回到出发点,那么这不就是传说中的——一笔画问题吗qwq?

嗯,那就是欧拉图了!即,如果你想对一个图进行一笔画,那么首先你需要它是一个偶图,意思就是需要这个图上,度数为奇数的点的个数为0或者为2。我们再考虑,一条路径在最优情况下,至多通过两次,因为通过三次就等同于通过一次,以此类推。

那,首先我们需要对这张图进行重构,如果不是一张偶图的话,我们就要添一条边。那添边怎么添呢?当然是贪心地、单调地添边啦!所以不妨在最小生成树中选边。而对于这种贪心的方式,由于它的边权是2的次幂,所以因为$$\sum\limits_{i = 1}^{n - 1}{2^i} < 2^n$$,可以保证贪心地添边是没错的,因为无论怎么添边,之后的一定没有之前的更优。

于是结束,撒花花!

至于代码,就是一遍\(dfs\)加上一次最小生成树,时间复杂度\(O(n + m)\),完全可以接受。有些有意思的小细节也是可圈可点的\(qwq\).

const int maxn=401000;
const int mod=1e9+7;
struct node{
int point;
int weight;
int nxt;
};
node line[maxn<<1];
int head[maxn],tail;
int ans=0;
int deg[maxn];
void add(int a,int b,int c){
line[++tail].point = b;
line[tail].weight = c;
line[tail].nxt = head[a];
head[a] = tail;
}
int f[maxn];
int find(int x){
return f[x] == x ? x : f[x] = find(f[x]) ;
}
bool _union(int a,int b){
int f1 = find(a), f2 = find(b);
if(f1 == f2) return false;//无法合并
f[f1] = f2; return true;//合并完返回
}
void dfs(int now,int fa){
for(int i=head[now];i;i=line[i].nxt)
if(line[i].point!=fa)//遍历整颗生成树
{
dfs(line[i].point,now);//向下递归解决子问题
if(deg[line[i].point]) deg[now]^=1,ans=(ans+line[i].weight)%mod;//如果儿子的度数为奇数,我们就补一条,然后自己的度数++
}
return ;
}
int main(){
int now = 1,a,b,n,m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n;i ++) f[i] = i ;//并查集初始化
for(int i = 1; i <= m;i ++)
{
scanf("%d%d",&a,&b);
now <<= 1;//now为边权
now = now % mod;
ans = (ans + now) % mod ;//先将每条边都算一遍
if(_union(a,b)) add(a, b, now), add(b, a, now) ;//因为边权是有序的,所以可以直接跑
deg[a]^=1, deg[b]^=1;//度数问题我们只用关心奇偶就可以了
}
dfs(1, 0) ;//其实从哪遍历都一样。
printf("%d", ans) ;//输出
}

T2

\(\mathcal{\color{red}{Description}}\)

Ps:前不久因为我太颓了……所以这个就鸽了……ORZ我慢慢更……有些题不会我还要现学啊

SDOI2018一轮NOI培训 题目整理的更多相关文章

  1. NOIp初赛题目整理

    NOIp初赛题目整理 这个 blog 用来整理扶苏准备第一轮 csp 时所做的与 csp 没 有 关 系 的历年 noip-J/S 初赛题目,记录了一些我从不知道的细碎知识点,还有一些憨憨题目,不定期 ...

  2. Noip往年题目整理

    Noip往年题目整理 张炳琪 一.历年题目 按时间倒序排序 年份 T1知识点 T2知识点 T3知识点 得分 总体 2016day1 模拟 Lca,树上差分 期望dp 144 挺难的一套题目,偏思维难度 ...

  3. SDOI2018 一轮培训划水祭

    \(\mathcal{Day \ \ -3}\) 作为前言来讲,我对于过几天的省选培训还是很期待的--就算我的实力根本不够,名额是学校推荐的,但是能见到\(\mathcal{cwbc}\)以及一众大佬 ...

  4. SDOI2018 二轮培训划水记

    \(\mathcal{Day -1}\) 嗯,虽然说\(rqy\)看我们这么懵O,并不建议我们去掺和这种神仙打架,但是为了逃文化课学习OI并参观膜拜各路神仙,我毅然决然地选择去参加这次培训-- 这次一 ...

  5. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  6. 第八届蓝桥杯c/c++省赛题目整理

    第一题 标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都 ...

  7. ACM - 动态规划专题 题目整理

    CodeForces 429B  Working out 预处理出从四个顶点到某个位置的最大权值,再枚举相遇点,相遇的时候只有两种情况,取最优解即可. #include<iostream> ...

  8. 【Android进阶】Android面试题目整理与讲解(一)

    这一篇文章专门整理一下研究过的Android面试题,内容会随着学习不断的增加,如果答案有错误,希望大家可以指正 1.简述Activity的生命周期 当Activity开始启动的时候,首先调用onCre ...

  9. 【转载】最全的面试题目整理(HTML+CSS部分)

    转载自 知乎 @西点王子 https://www.zhihu.com/people/F211/answers 1. 常用那几种浏览器测试?有哪些内核(Layout Engine)? (Q1) 浏览器: ...

随机推荐

  1. 快速幂取模(POJ 1995)

    http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c ...

  2. 基于 java 【Web安全】文件上传漏洞及目录遍历攻击

    前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...

  3. Java枚举、静态导入、自动拆装箱、增强for循环、可变参数

    一.枚举简介 1.什么是枚举? 需要在一定范围内取值,这个值只能是这个范围内中的任意一个 现实场景:交通信号灯,有三种颜色,但是每次只能亮三种颜色里面的任意一个 2.使用一个关键字 enum enum ...

  4. MyBatis缓存通俗易懂

    1.1     mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的 ...

  5. Document对象关于窗口的一些属性

    在网上搜罗的,只为自己查用方便,不做他用 window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间 ...

  6. 关系型数据库——主键&外键的

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  7. PHP中使用Jpgraph生成统计图

    Jpgraph是PHP图表类库,可以生成折线图.柱状图.大饼图等等统计图.如果你想使用PHP生成统计图来统计数据,使用它再方便不过啦. 如果说你要亲自使用GD库来写的话,那我只能膜拜大神啦(我不会哈哈 ...

  8. GoJs实现流程管理图

    GoJS是一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库. 可以加入诸多功能.如流程判断,节点处理等等.GOJS在设计上极大的减轻了开发人员的开发成本.

  9. 已注册成Portal联合服务器的Server,如何修改机器名?

    1.产品版本 ArcGIS for Server 10.2.2 2.修改说明 本环境中,Portal for ArcGIS和ArcGIS for Server两个产品安装在同一台机器上.安装前已将完全 ...

  10. Difference between scipy.fftpack and numpy.fft

    scipy.fftpack 和 numpy.fft 的区别 When applying scipy.fftpack.rfft and numpy.fft.rfft I get the followin ...