题目链接:https://pan.baidu.com/s/1_vsHfMI_qO-9IDxmFLkHfg 密码: uza8

T1:

小奥的一笔画,判连通性,查奇偶点即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
inline long long read()
{
long long f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
long long t;
long long n,m;
struct node{
long long x,y;
long long nex;
}s[];
long long head[];
long long cnt=;
void add(long long a,long long b)
{
s[cnt].x=a,s[cnt].y=b;
s[cnt].nex=head[a];head[a]=cnt++;
}
long long xx[];
long long book[];
bool f;
void dfs(long long bh,long long ans)
{
for(long long i=head[bh];i!=-;i=s[i].nex)
{
if(book[s[i].y]==)
{
book[s[i].y]=;
dfs(s[i].y,ans+);
}
}
return;
}
int main()
{
t=read();
while(t--)
{
memset(head,-,sizeof(head));
memset(book,,sizeof(book));
memset(s,,sizeof(s));
memset(xx,,sizeof(xx));
n=read(),m=read();
cnt=;
for(long long i=;i<=m;i++)
{
long long u=read(),v=read();
add(u,v),add(v,u);
xx[u]++,xx[v]++;
}
f=true;
book[]=;
dfs(,);
for(int i=;i<=n;i++)
if(book[i]==) {f=false;break;}
if(f==false)
{
cout<<"NO"<<endl;
continue;
}
bool ssss=true;long long ans=;
for(long long i=;i<=n;i++)
{
if(xx[i]%==) ans++;
if(xx[i]==)
{
ssss=false;
cout<<"NO"<<endl;
break;
}
if(ans>)
{
ssss=false;
cout<<"NO"<<endl;
break;
}
}
if(ssss) cout<<"YES"<<endl;
}
return ;
}
/*
1
8 9
1 2
1 3
2 3
3 7
3 8
3 4
4 5
5 6
3 8
*/

T2:

状压dp,dp[i][j]:i在二进制有0的位数表示这个人希望已被破灭,1表示这个希望仍在。j表示前j个人(被期望活的人m)。总体表示在逆元之后的值

显然,dp[i][j+1]=(dp[i][j]*inv)%mod(j+1这个人还活着)

而j+1死的时候:dp[i&t1][j+1]=(dp[i][j]*inv)%mod //ti表示除了希望破灭的人的二进制数,从而表示出来j+1死后别人的希望

因为每种可能都占1/2,所以每次取前面dp[i][j]的1/2

dp[(1<<n)-1][0]=1,因为这是每一个都有希望

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define inv 499122177
#define mod 998244353
#define low_bit(x) x&-x
using namespace std;
inline long long read()
{
long long f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
long long cx(long long s)
{
long long c=;
while(s!=)
{
long long sry=low_bit(s);
s-=sry;
c++;
}
return c;
}
long long n,m,dp[][],ans[];
long long s[][];
int main()
{
n=read(),m=read();
for(long long i=;i<=n;i++)
{
long long x=read();
long long xx;
for(long long j=;j<=x;j++) xx=read(),s[i][xx]=;
}
dp[(<<n)-][]=;
for(long long i=;i<m;i++)
{
for(long long j=(<<n)-;j>=;j--)
{
dp[j][i+]+=(dp[j][i]*inv)%mod;
dp[j][i+]%=mod;
long long t=(<<n)-;
for(long long k=;k<=n;k++)
if(s[k][i+]==) t-=(<<k-);
dp[j&t][i+]+=(dp[j][i]*inv)%mod;
dp[j&t][i+]%=mod;
}
}
for(long long i=;i<=(<<n)-;i++)
{
(ans[cx(i)]+=dp[i][m])%=mod;
}
for(long long i=;i<=n;i++) printf("%d ",ans[i]);
}

四连测Day3的更多相关文章

  1. 提高十连测day3

    提高十连测day3 A 我们可以枚举两个 $ 1 $ 之间的相隔距离,然后计算形如 $ 00100100 \cdots $ 的串在原串中最⻓⼦序列匹配即可,复杂度 $ O(n^2) $ .寻找 $ S ...

  2. 四连测Day4

    四连爆炸 卡我常数 好像被AluminumGod拉到了创客...哇我这个天天爆炸的水平可能会被其他三位dalao吊起来打 orz Edmond-Karp_XiongGod orz Deidara_Wa ...

  3. 【2018.8.10】四连测day4 题解

    T1:给出一棵 $n$ 个节点的无根树,其中 $m$ 个节点是特殊节点,求对于任意 $i ∈ [0, m]$,包含 $i$ 个特殊节点的联通块个数$\mod 998244353$. $1<=n, ...

  4. 四连测总结(XYX)

    目录 成绩 总结 事后... 成绩 telephonewire monkey 总分 0 56 56 cowjog guard path temperature 总分 0 40 0 68 108 cba ...

  5. 四连测Day2

    题目:链接: https://pan.baidu.com/s/1ef_9hGBhczW0B4dz5IUKmw 密码: qgjy T1: hash后直接二分查询即可 #include<iostre ...

  6. 四连测Day1

    题目:链接: https://pan.baidu.com/s/163ycV64ioy7uML7AvRDTGw 密码: p86i T1: 倍增求LCA,minn数组记录最小值 #include<i ...

  7. ZROI 提高十连测 DAY3

    由于我不太会写 觉得从比赛开始就冷静分析.然后看完三道题心态有点爆炸没有紧扣题目的性质. 这个心态是不可取的尽量不要有畏难心理 不要草草的写暴力. LINK:[最长01子序列](http://zhen ...

  8. (四连测)滑雪场的高度差题解---二分 + 搜索---DD(XYX)​​​​​​​的博客

    滑雪场的高度差 时间限制: 1 Sec  内存限制: 128 MB 题目描述 滑雪场可以看成M x N的网格状山地(1 <= M,N <= 500),每个网格是一个近似的平面,具有水平高度 ...

  9. STM32—TIMx实现编码器四倍频

    文章目录 一.储备知识 二.TIMx的编码器模式介绍 1.计数边沿设置 2.选择极性和使能 3.使能 4.计数方向 三.代码部分 一.储备知识 通过STM32的定时器编码器接口模式对编码器进行四倍频, ...

随机推荐

  1. Java enum类型笔记

    用途: 定义命令行参数,菜单选项,星期,方向(东西南北)等 与普通类的不同 有默认的方法 value() 每个enum类都已默认继承java.lang.Enum,所以enum类不能继承其他类 构造方法 ...

  2. docker学习2

    今天继续学习docker! 搜索镜像 docker search centos 下载镜像 docker pull name(镜像名字) 查看镜像docker images 字段含义分析: TAG:仓库 ...

  3. Java进阶知识点: 枚举值

    Java进阶知识点1:白捡的扩展性 - 枚举值也是对象   一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...

  4. 【机器学习】线性回归python实现

    线性回归原理介绍 线性回归python实现 线性回归sklearn实现 这里使用python实现线性回归,没有使用sklearn等机器学习框架,目的是帮助理解算法的原理. 写了三个例子,分别是单变量的 ...

  5. hibernate 异常a different object with the same identifier value was already associated with the session

    在使用hibernate的时候发现了一个问题,记录一下解决方案. 前提开启了事务和事务间并无commit,进行两次save,第二次的时候爆出下面的异常a different object with t ...

  6. Netcore logging config

  7. 如何理解*p++

    后置递增运算符的优先级高于解引用运算符! *p++ 等价于 *(p++) 但是,我们*p++的求值结果不可理解为p+1指向的对象的值,而应该是p指向的对象的值. 这是由于后置++的特性引起的. *p+ ...

  8. Right-BICEP要求四则2的测试用例

    测试方法:Right-BICEP 测试计划 1.Right-结果是否正确? 2.B-是否所有的边界条件都是正确的? 3.P-是否满足性能要求? 4.是否有乘除法? 5.是否有括号? 6.是否有真分数? ...

  9. C++ 学习笔记之 引用

    一.定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 二.用法: 基本用法 例如: int & a = b; 引用作为函数返回值 先看一个例子: #inclu ...

  10. Java中的 toString 方法

    1. Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息: 2. 在进行 String 与其它类型数据的连接操作时 ...