T1 星际旅行

题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案。本质不同:当且仅当至少存在一条边经过次数不同。

题解:考试的时候理解错题,以为他是一棵树,然后我就凉凉了。。。考试感觉今天T1怎么这么难,看了题解才发现这是一道水题。

只有两条边经过一次,其余都经过两次,考虑拆边,把每条边拆成两条,拆完之后每个点的度一定都是偶数,问题就变成了选择两条边删去,使剩下的图形成欧拉路。

删去的边可以有三种情况:

  1>任意两条有公共顶点的边

  2>任意两个自环

  3>一个自环+一条边

然后就是这道题可能不联通(坑了不少人),注意是边不联通而不是点不连通。因为一个点在外边单着没边并不影响题目要求经过边怎么怎么样,但要是外面有个点单着,而且还连着一个自环,那这张图中的所有边不可能组成欧拉路。具体做法是那一个并查集维护这张图的联通性,不联通就直接输出0就行了。

考试的时候由于题意的理解问题,这道题先是按树做的,后来反应过来是张图,脑子怎么抽筋了,开始改,但由于没看出来是欧拉图,改的一塌糊涂,前前后后做这道题大概要有2个小时。(大家都说很显然的欧拉图,但我觉得不是那么显然。。。太菜了)。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll n,m,d[],fa[],in[],sum,rt,tot,ans;
ll find(ll x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
scanf("%lld%lld",&n,&m);
ll u,v;
for(ll i=;i<=n;i++) fa[i]=i;
for(ll i=;i<=m;i++){
scanf("%lld%lld",&u,&v);
ll fx=find(u),fy=find(v);
if(u==v) sum++;
else{
fa[fx]=fy;
in[u]++;in[v]++;
}
d[u]++;d[v]++;
}
for(ll i=;i<=n;i++){
if(d[i]!=){
find(i);
rt=i;
break;
}
}
for(ll i=;i<=n;i++){
if(d[i]!=&&find(i)!=fa[rt]){
puts("");
return ;
}
}
for(ll i=;i<=n;i++){
ans+=(in[i]-)*in[i]/;
}
tot/=;
ans+=(sum-)*sum/;
ans+=sum*(m-sum);
printf("%lld\n",ans);
return ;
}

星际旅行

T2 砍树

题解:

一开始一看就码了一个二分,然而二分的左右端点又写错了,导致20分直接丢掉,挺难受的。

这个题不能二分,因为不满足单调性(不信的话可以输出一下search函数的返回值,发现是0101000111。。之类的)。

说正解,需要砍掉的长度tot=Σ[a[i]/d]×d-Σa[i],要求tot<=k;另sum=k+Σa[i],得Σ[a[i]/d]×d<=sum,移项Σ[a[i]/d]<=sum/d;左边的是分段函数而且单调递减,d是从小到大枚举,递增的,除过去递减的,但左边减的快,右边慢,(画图理解)。因为sum/d是向下取整的,所以是分段递减,左边是l的话,r=sum/(sum/l);原谅我也不知道这是为什么。。。只需要判断d=r是否满足Σ[a[i]/d]×d<=sum的条件,满足就更新ans,不满足就下一个。为啥是右端点呢?第一是因为题目要求d最大,右端点就是最大的。第二就是Σ[a[i]/d]是单调递减的,而sum/d是平的,右端点不符合那整段就一定不符合了。

这题很可惜,二分的错解范围打错直接爆0,丢了20分,血的教训啊!!!

砍树

T3 超级树

题意:一棵满二叉树,所有的节点都和他所有的祖先节点连边,问不经过重复点的路径一共有多少。

这题一看我以为有式子能直接推出来,推了十分钟半点规律都没找到,打了个特判就去钢T2了,结果就这道拿分了。。。dp不太明白状态定义,先留坑

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll n,mod,f[][];
int main()
{
scanf("%lld%lld",&n,&mod);
f[][]=;f[][]=;
for(int i=;i<=n;i++){
ll m=n-i+;
for(int l=;l<=m;l++){
for(int r=;r<=m-l;r++){
ll sum=f[i][l]*f[i][r]%mod;
f[i+][l+r]=(f[i+][l+r]+sum)%mod;
f[i+][l+r+]=(f[i+][l+r+]+sum)%mod;
f[i+][l+r]=(f[i+][l+r]+sum*l*)%mod;
f[i+][l+r]=(f[i+][l+r]+sum*r*)%mod;
f[i+][l+r-]=(f[i+][l+r-]+sum*r*l*)%mod;
f[i+][l+r-]=(f[i+][l+r-]+sum*(l-)*l)%mod;
f[i+][l+r-]=(f[i+][l+r-]+sum*(r-)*r)%mod;
}
}
}
printf("%lld",f[n][]%mod);
}

超级树

7.18 NOIP模拟测试5 星际旅行+砍树+超级树的更多相关文章

  1. 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏

    T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...

  2. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  3. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  5. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  6. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  7. NOIP模拟测试5「星际旅行·砍树·超级树」

    星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...

  8. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  9. noip模拟8[星际旅行·砍树·超级树·求和]

    也不能算考得好,虽然这次A了一道题,但主要是那道题太简单了,没啥成就感,而且有好多人都A掉了 除了那一道,其他的加起来一共拿了25pts,这我能咋办,无奈的去改题 整场考试的状态并不是很好啊,不知道是 ...

随机推荐

  1. promise处理回调地狱

    promise 异步调用 异步结果分析 定时任务 ajax 自定义事件函数 多次异步调用依赖分析(promise 应用场景) 多次异步调用结果顺序不确定问题 $.ajax({ url: 'http:l ...

  2. JSON转成List结构数据

    先要引入对应的jar,然后调用net.sf.json库的 ObjectMapper mapper = new ObjectMapper(); JavaType javaType = mapper.ge ...

  3. MySQL锁表查询SQL

    // 查看进程 SHOW PROCESSLIST; // 查看是否锁表 SHOW OPEN TABLES WHERE In_use > 0; // 查看正在锁的事务 SELECT * FROM ...

  4. javascript判断mp3是否播放完

    javascript判断mp3是否播放完 var audio=document.getElementById('audio'); if(audio){ audio.loop = false; audi ...

  5. MySQL for OPS 07:主从复制

    写在前面的话 对于企业而言,在互联网这一块其实最重要的是数据.保证数据的安全性,稳定性是作为运维人的基本工作职责.于是为了数据安全性,引进了数据备份,bin log 等.但这并不意味着有这些就足够了. ...

  6. SQL Server中INSERT EXEC语句不能嵌套使用(转载)

    问: I have three stored procedures Sp1, Sp2 and Sp3.The first one (Sp1) will execute the second one ( ...

  7. POC挖矿没有前途

    最好的工作量证明是能力证明,能力不适合存储.望文生义,能力的本质意义是“能”和“力”(所有的词汇都按照望文生义理解,因为所有不能望文生义的词汇都是不良的已经被前人修正或将来被后人修正)能力是流动的,迁 ...

  8. sql 动态行转列 (2005及以上版本)

    表数据: sql: --pivot方案 sql 2005及以上版本 ) Set @sql=(Select DISTINCT ','+ N'[' +pref_name+N']' FROM dbo.Pop ...

  9. 利用Java EE里jsp制作登录界面

    jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...

  10. python高级语法1

    1.解压序列赋值给多个变量 p = (4, 5, 6) x, y , z = p # x = 4, y = 5, z = 6 若可迭代对象超过变量个数,会抛出ValueError 用处:可以解压赋值任 ...