题意:给定无向图,让你给点加权(1,2,3),使得每条边是两端点点权和维奇数。

思路:一个连通块是个二分图,判定二分图可以dfs,并查集,2-sat染色。 这里用的并查集(还可以带权并查集优化一下,或者干脆用dfs)。

计数的时候每个连通块单独考虑,我们从连通块的第一个点开始dfs,如果是该填奇数点,那么当前方案数*=2;分第一个点奇偶两种情况即可。

(多组输入一定注意初始化,这次CF多组输入好坑啊。。。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=;
int Laxt[maxn],Next[maxn],To[maxn],cnt,num1,num2,vis[maxn],tot,ans;
void add(int u,int v){
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v;
}
void dfs(int u,int f,int x,int y)
{
tot++; vis[u]=;
if(x==) num1=num1*%Mod;
if(y==) num2=num2*%Mod;
for(int i=Laxt[u];i;i=Next[i]){
if(To[i]!=f&&!vis[To[i]]) dfs(To[i],u,-x,-y);
} }
int fa[maxn];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int main()
{
int T,N,M,u,v;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
rep(i,,N) Laxt[i]=; cnt=;
rep(i,,N+N) fa[i]=i,vis[i]=;
bool F=true;
rep(i,,M){
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
if(find(u)==find(v)) F=false;
fa[find(u)]=find(v+N);
fa[find(v)]=find(u+N);
}
if(!F) puts("");
else {
ans=;
rep(i,,N) {
if(!vis[i]){
num1=; num2=; tot=;
dfs(i,,,);
if(tot==) ans=3LL*ans%Mod;
else ans=1LL*ans*(num1+num2)%Mod;
}
}
printf("%d\n",ans);
}
}
return ;
}

CodeForces - 1093D:Beautiful Graph(二分图判定+方案数)的更多相关文章

  1. Codeforces 1093D Beautiful Graph(二分图染色+计数)

    题目链接:Beautiful Graph 题意:给定一张无向无权图,每个顶点可以赋值1,2,3,现要求相邻节点一奇一偶,求符合要求的图的个数. 题解:由于一奇一偶,需二分图判定,染色.判定失败,直接输 ...

  2. Codeforces 1093D. Beautiful Graph【二分图染色】+【组合数】

    <题目链接> 题目大意: 给你一个无向图(该无向图无自环,且无重边),现在要你给这个无向图的点加权,所加权值可以是1,2,3.给这些点加权之后,要使得任意边的两个端点权值之和为奇数,问总共 ...

  3. D - Beautiful Graph CodeForces - 1093D (二分图染色+方案数)

    D - Beautiful Graph CodeForces - 1093D You are given an undirected unweighted graph consisting of nn ...

  4. Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph (二分图染色)

    题意:有\(n\)个点,\(m\)条边的无向图,可以给每个点赋点权\({1,2,3}\),使得每个点连的奇偶不同,问有多少种方案,答案对\(998244353\)取模. 题解:要使得每个点所连的奇偶不 ...

  5. Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 && DFS】

    传送门:http://codeforces.com/contest/1093/problem/D D. Beautiful Graph time limit per test 2 seconds me ...

  6. Codeforces 509F Progress Monitoring:区间dp【根据遍历顺序求树的方案数】

    题目链接:http://codeforces.com/problemset/problem/509/F 题意: 告诉你遍历一棵树的方法,以及遍历节点的顺序a[i],长度为n. 问你这棵树有多少种可能的 ...

  7. Codeforces 461B. Appleman and Tree[树形DP 方案数]

    B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. Codeforces 57C (1-n递增方案数,组合数取模,lucas)

    这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...

  9. Educational Codeforces Round 56 D - Beautiful Graph

    ​题目大意: 在给定的一个图中(可能不连通) 给每个点赋值1.2.3 使得一条边上的两个端点点权相加为奇数 求方案数 一条满足条件的路径上的点权必为一奇一偶交替 偶数只有2 奇数有1.3 若位于1.3 ...

随机推荐

  1. jq 命名空间

    $('ul').on("click",function(){console.log('all');});$('ul').on("click.a",functio ...

  2. angular2版本迭代之特性追踪

    一. 2.0.0 升级到 2.4 升级前: 1.确保没有使用extends关键字实现OnInit的继承,以及没有用任何的生命周期中,而是全部改用implements. 2.停止使用deep impor ...

  3. yii CComponent组件 实例说明1

    yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...

  4. Party CodeForces - 906C (状压)

    大意: 给定n(n<=22)个人, m个关系谁跟谁是朋友, 朋友关系是双向的, 每次操作可以选择一个人, 使他的朋友互相成为朋友, 求最少多少次操作可以使所有人互相认识 这个题挺巧妙的了, 关键 ...

  5. js传入和传出参数乱码

    向js传入参数乱码问题 第一种解决方法 当Js中输出内容中包含中文,可能会导致出现乱码. 如何解决: 1. 设置页面编码: Html代码 <meta http-equiv="Conte ...

  6. 使用dbms_output.put_line打印异常所在的行

    dbms_output.put_line(dbms_utility.format_error_stack); dbms_output.put_line(dbms_utility.format_call ...

  7. OC Copy和Property

  8. sublime 个人心得

    sublime 3快捷键: (1) Ctrl+O(Command+O)可以实现头文件和源文件之间的快速切换 (2) 双击可选中光标所在单词,三击可选中光标所在行(等同于Ctrl+L(Command+L ...

  9. spark streaming 入门例子

    spark streaming 入门例子: spark shell import org.apache.spark._ import org.apache.spark.streaming._ sc.g ...

  10. React路由配置使用

    Router包安装: 安装包还是要打开命令行工具,使用npm来进行安装. npm install --save react-router react-router-dom 页面login: impor ...