题目链接: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. flume 整合 kafka

    flume 整合 kafka:   flume:高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. kafka:分布式的流数据平台.   flume 采集业务日志,发送到kafka   一. ...

  2. 【rich-text】 富文本组件说明

    [rich-text] 富文本组件可以显示HTML代码样式. 1)支持事件:tap.touchstart.touchmove.touchcancel.touchend和longtap 2)信任的HTM ...

  3. List和String数组相互转化

    在工作中经常会遇到需要String[] 参数的地方,我们可以先定义一个list,再转成String[] 来使用,使用list的好处自然是可以随时方便的添加删除元素,下面是方法: List list = ...

  4. lintcode 二叉树中序遍历

    /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * Tr ...

  5. Python基础 之 数据类型

    数据类型 一.运算符 算数运算a = 10 * 10赋值运算a = a + 1 a+=1 布尔值:True 真 False 假 if True: pass while True: pass v = n ...

  6. 1 wait notify

    wait/notify: wait()使线程停止,notify使wait状态的线程继续执行. wait()是Object类的方法,该方法用来将线程置入“预执行队列”,并在wait()方法处停止执行,直 ...

  7. 第一个线性回归程序(基于Jupyter)

    import pandas as pdimport seaborn as snssns.set(context="notebook", style="whitegrid& ...

  8. LeetCode 100——相同的树

    1. 题目 2. 解答 针对两棵树的根节点,有下列四种情况: p 和 q 都为空,两棵树相同: p 不为空 q 为空,两棵树不相同: p 为空 q 不为空,两棵树不相同: p 和 q 都不为空,如果两 ...

  9. 【转】cpu的核心数与线程数的关系

    原文地址:http://www.dn580.com/dnzs/dncs/2013/10/08/172948914.html 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能 ...

  10. .net控制台程序Program args参数解析

    一直很有疑问在控制台程序的Main函数中为什么会有个string[] args的参数,又没有什么用. static void Main(string[] args) { } 这几天需要将一个控制台程序 ...