题解:

80分做法还是听简单的

对于非树边枚举一下端点状态

然而我也不知道为什么就多t了一个点

具体实现上

最暴力的是3^n次 但是我们可以发现对于i不取,j取 i不取,j不取是可以等效成i不取,j没有限制,这样是2^n

或者直接容斥一下搞i取j取 这样C(n,1)+C(n,2)...=2^n一样的吧

100pts应该是虚树处理一下系数吧

代码:

#include <bits/stdc++.h>
using namespace std;
#define N 300000
#define rg register
#define mo 998244353
#define ll long long
struct re{
int a,b;
}a[N],ts[];
const int n2=1e7;
int head[N],l2,l,v[N],n,m,hash[n2];
ll dp[N][],ans;
bool f[N],ff[N];
inline void arr(int x,int y)
{
a[++l].a=head[x];
a[l].b=y;
head[x]=l;
}
inline void dfs(int x,int y)
{
rg int u=head[x];
f[x]=;
while (u)
{
rg int v=a[u].b;
if (u!=y)
{
if (f[v])
{
if (!ff[u])
{
ts[++l2].a=a[u].b;
ts[l2].b=x;
ff[u]=;
ff[u%?u+:u-]=;
}
} else dfs(v,u%?u+:u-);
}
u=a[u].a;
}
}
inline void dfs3(rg int x,rg int y)
{
rg int u=head[x];
dp[x][]=; dp[x][]=;
if (v[x]==) dp[x][]=;
if (v[x]==-) dp[x][]=;
while (u)
{
rg int v=a[u].b;
if (u!=y&&!ff[u])
{
dfs3(v,u%?u+:u-);
dp[x][]*=dp[v][];
dp[x][]%=mo;
dp[x][]*=(dp[v][]+dp[v][]);
dp[x][]%=mo;
}
u=a[u].a;
}
}
const int mo1=9e6+;
inline void dfs2(rg int now)
{
if (now==)
{
memset(dp,,sizeof(dp));
dfs3(,);
ans+=dp[][]+dp[][];
ans%=mo;
return;
}
rg int x=ts[now].a,y=ts[now].b;
rg int tmp1=v[x],tmp2=v[y];
if (v[x]!=&&v[y]!=-)
{
v[x]=-; v[y]=; dfs2(now-); v[x]=tmp1; v[y]=tmp2;
}
if (v[y]!=)
{
v[y]=-; dfs2(now-); v[y]=tmp2;
}
}
int main()
{
freopen("noi.in","r",stdin);
freopen("noi.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>n>>m;
int x,y;
for (rg int i=;i<=m;i++)
{
cin>>x>>y;
arr(x,y); arr(y,x);
}
dfs(,);
dfs2(l2);
cout<<ans<<endl;
return ;
}

#10 //I [HNOI/AHOI2018]毒瘤的更多相关文章

  1. Luogu P4426 [HNOI/AHOI2018]毒瘤

    题目 神仙题. 首先我们可以把题意转化为图的独立集计数.显然这个东西是个NP-Hard的. 然后我们可以注意到\(m\le n+10\),也就是说最多有\(11\)条非树边. 我们现在先考虑一下,树上 ...

  2. 题解 [HNOI/AHOI2018]毒瘤

    题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条边的无向图,问有多少个点集满足点集中任意两点均不存在边相连. \(n\le 10^5,m-n\le 10\),答案对 \(9982443 ...

  3. 洛谷 P4426 - [HNOI/AHOI2018]毒瘤(虚树+dp)

    题面传送门 神仙虚树题. 首先考虑最 trival 的情况:\(m=n-1\),也就是一棵树的情况.这个我相信刚学树形 \(dp\) 的都能够秒掉罢(确信).直接设 \(dp_{i,0/1}\) 在表 ...

  4. [HNOI/AHOI2018]毒瘤

    题目描述 https://www.lydsy.com/JudgeOnline/upload/201804/%E6%B9%96%E5%8D%97%E4%B8%80%E8%AF%95%E8%AF%95%E ...

  5. P4426 [HNOI/AHOI2018]毒瘤

    挺不错的一个题. 题意即为求一个图的独立集方案数. 如果原图是一棵树,可以直接大力f[x][0/1]来dp. 由于非树边很少,考虑2^11容斥,强制某些点必选,然后再O(n)dp,这样应该过不了. 发 ...

  6. 【LG4437】[HNOI/AHOI2018]排列

    [LG4437][HNOI/AHOI2018]排列 题面 洛谷 题解 题面里这个毒瘤的东西我们转化一下: 对于\(\forall k,j\),若\(p_k=a_{p_j}\),则\(k<j\). ...

  7. [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)

    P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...

  8. [HNOI/AHOI2018]转盘(线段树优化单调)

    gugu  bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...

  9. 【题解】Luogu P4436 [HNOI/AHOI2018]游戏

    原题传送门 \(n^2\)过百万在HNOI/AHOI2018中真的成功了qwqwq 先将没门分格的地方连起来,枚举每一个块,看向左向右最多能走多远,最坏复杂度\(O(n^2)\),但出题人竟然没卡(建 ...

随机推荐

  1. python -- 异步IO 协程

    python 3.4 >>> import asyncio >>> from datetime import datetime >>> @asyn ...

  2. 为什么选择图形数据库,为什么选择Neo4j?

    最近在抓取一些社交网站的数据,抓下来的数据用MySql存储.问我为什么用MySql,那自然是入门简单,并且我当时只熟悉MySql.可是,随着数据量越来越大,有一个问题始终困扰着我,那就是社交关系的存储 ...

  3. C# 批量修改文件名

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. php 无法正确获取系统当前时间的解决办法

    今天捣鼓一个统计系统时让用户自动录入用户信息,后台使用PHP的date()函数来获取系统时间,发现时间跟当前时间对不上,后来是因为PHP默认的时区是UTC,应该将其时区设置为北京时间. 方法一:修改p ...

  5. tidb 架构 ~Tidb学习系列(1)

    一 简介:今天来研究Tidb 二 安装测试: 0 下载Tidb wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz   按如 ...

  6. 修正iOS从照相机和相册中获取的图片方向

    使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrientationLeft,在使用的时候会出现图片顺时针偏转90°.使用fixOrientati ...

  7. Android判断当前是否在主线程

    Android开发中, 有时需要判断当前线程到底是主线程, 还是子线程, 例如: 我们在自定义View时, 想要让View重绘, 需要先判断当前线程到底是不是主线程, 然后根据判断结果来决定到底是调用 ...

  8. linux 网卡

    查看网卡UUID:nmcli con show    或    nmcli con list 查看网卡mac地址:nmcli dev show    或    nmcli dev list 注:sho ...

  9. linux挂载硬盘以及卸载硬盘

    1.在vmware添加硬盘 2.输入fdisk -l 查看新增加的硬盘 3.分区初始化 4.指定文件系统 5.修改fstab文件 fstab: 6.刷新验证 mount -a 挂载定义在/etc/fs ...

  10. C++ socket 传输不同类型数据的四种方式

    使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿): a. 结构体 b. Json序列化 c. 类对象 d. protobuf 下面逐一整理一下,方便以后进行项目开发. 1. ...