题目链接:http://codeforces.com/contest/1093/problem/D
第一次做这种题目,染色+组合数学。。
假设这个图里有奇数环,那么肯定是不行的,因为无论怎么样都是偶数。
如果没有奇数环。那么对于任意一个连通分支,一条边所连得两个点,肯定有一个是2,另外的是1或者3。如果将每条边连接的两个点染成黑点和白点。个数分别为wi和vi,如果黑点是2,那么个数就是2vi。如果白点是2,那么个数是2wi。那么这个连通分支的就是这两个数的和,整个图的就是各个连通分支的数的乘积。。

由于这是多组输入,vector要清零。
不要用memset,对数组都做了一个遍,会TLE。
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cmath>
#define ll long long
#define mod 998244353
using namespace std;const int maxx=3e5+10;
vector<int >p[maxx];
int color[maxx];
int cnt1=0;
int cnt0=0;
int n,m;
int flag;ll qsm(ll a,ll b)//快速幂
{ll ans=1;while(b){if(b%2) ans=(ans*a)%mod;b/=2;a=(a*a)%mod;}return ans;
}void init()
{for(int i=0;i<=n;i++) p[i].clear();for(int i=0;i<=n;i++) color[i]=0;
}void dfs(int x,int c)
{if(c==1) cnt1++;if(c==2) cnt0++;color[x]=c;for(int i=0;i<p[x].size();i++){if(color[p[x][i]]==0) dfs(p[x][i],3-c);//3-c,如果是1,那么就变成了2,如果是2,就变成了1。如果是3,那么就变成了0,那样的话,就相当于没有遍历,以后偶还是会遍历到的。。else if(color[p[x][i]]==c)//有奇数环{flag=0;return ;}}
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);init();for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);p[a].push_back(b);p[b].push_back(a);}flag=1;ll ans=1;for(int i=1;i<=n;i++){if(color[i]==0){cnt1=0;cnt0=0;dfs(i,1);if(!flag) break;ans=(ans*(qsm(2,cnt1)%mod+qsm(2,cnt0)%mod)%mod)%mod;}}if(!flag) printf("0\n");else printf("%I64d\n",ans%mod);}
}

努力加油a啊,(o)/~

Codeforces 1093D Beautiful Graph相关推荐

  1. 【CodeForces 1265C --- Beautiful Regional Contest】

    [CodeForces 1265C --- Beautiful Regional Contest] 题目来源:点击进入[CodeForces 1265C - Beautiful Regional Co ...

  2. CodeForces - 55D Beautiful numbers

    题目链接:http://codeforces.com/problemset/problem/55/D 题意:求区间[L,R]有多少个Beautiful numbers.Beautiful number ...

  3. CodeForces - 1494E A-Z Graph(构造+思维)

    题目链接:https://vjudge.net/problem/CodeForces-1494E 题目大意:给出一个初始时只有 nnn 个点的有向带权图,需要执行 mmm 次操作,每次操作分为下列三种 ...

  4. Codeforces 55D Beautiful Number (数位统计)

    把数位dp写成记忆化搜索的形式,方法很赞,代码量少了很多. 下面为转载内容:  a positive integer number is beautiful if and only if it is  ...

  5. codeforces CF986C AND Graph 建圖 dfs

    $ \rightarrow $ 戳我進CF原題 C. AND Graph time limit per test: 4 seconds memory limit per test: 256 megab ...

  6. Codeforces 55D Beautiful numbers (数位DP)

    题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少.beautiful number是指这个数可以被组成它的数字整除.例如15是beautiful number,因为 ...

  7. Codeforces 466E Information Graph

    Information Graph 把询问离线之后就能随便搞了, 去check一下是不是祖先, 可以用倍增也能用dfs序. #include<bits/stdc++.h> #define ...

  8. CodeForces 893B Beautiful Divisors (打表)

    题目大意:最近,Luba了解了一种特殊的数字,他称之为"漂亮的数字".这个数被称为漂亮是因为它的二进制表示包括k+1个连续的,然后是k个连续的0. Some examples of ...

  9. CodeForces - 893B Beautiful Divisors(数学,二进制)

    Description Recently Luba learned about a special kind of numbers that she calls beautiful numbers. ...

最新文章

  1. vbs 服务器获取输入信息,取得服务器上用户组列表脚本之VBS版
  2. AVS 通信模块之HTTP2Transport
  3. 【数据挖掘知识点五】层次聚类方法的理解
  4. 成绩排序的c语言算法,成绩排序系统(练习排序算法和复习C语言)
  5. boost::iterator_property_map用法的测试程序
  6. 学习MFC首先要知道的--程序执行顺序
  7. 标准I/O小程序-文件拷贝
  8. Qt文档阅读笔记-Q_CLASSINFO官方解析与实例
  9. LeetCode篇之栈:155(常数时间复杂度内找最小栈)
  10. 深圳出差 第二天【原创】
  11. linux下zookeeper启动命令,For Linux Zookeeper客户端命令行操作指令
  12. xx是一个类型 这在给定的上下文_#PaperCarrier | CoSeRNN :为你解释序列化与上下文在会话推荐中的作用...
  13. re正则表达式7_{}
  14. Kali linux 安装Ralink外置无线网卡
  15. 张飞硬件90天学习笔记——第01天个人记录,完整请看我的个人简介/主页
  16. 自定义桌面(仿360桌面)
  17. Python 分类问题研究-Fisher线性判别
  18. 程序员缺少自信怎么办? AI 训练数千次的回答
  19. 最新,最严谨的手机号校验
  20. JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. win10 hyper ubuntu18 共享文件夹
  2. ubantu自带防火墙的相关使用
  3. Android如何获得当前应用显示的Activity
  4. android listview settag,Android View中setTag的二三事
  5. 计算机科学与教育信息化国际会议,A Courses Ontology System for Computer Science Education...
  6. matlab火箭升空问题,困扰火箭的三大问题终于要解决了!球迷:我都要膨胀了!...
  7. tms脚本演示代码之一
  8. 【BIRT】使用rptlibrary设置统一数据源
  9. [Web 前端 ] 还在用浮动吗?CSS flex布局你了解多少?
  10. 织梦生成栏目找不到模板怎么知道是哪个栏目和模板