CF1093D Beautiful Graph

Stella981
• 阅读 661

思路:

题目倒是没啥好说的,就是注意memset的效率问题。如果循环多次调用memset去初始化一个比较大的数组,那就会很费时间。就是因为这个被hack了。:(

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 const int MOD = 998244353;
 6 const int MAXN = 300005;
 7 
 8 vector<int> G[MAXN];
 9 int col[MAXN];
10 int n, m;
11 ll c1 = 0, c2 = 0, bin[MAXN];
12 
13 bool dfs(int v, int c)
14 {
15     col[v] = c;
16     if (c == 1) c1++;
17     else c2++;
18     for (int i = 0; i < G[v].size(); i++)
19     {
20         if (col[G[v][i]] == c) return false;
21         if (col[G[v][i]] == 0 && !dfs(G[v][i], 3 - c)) return false;
22     }
23     return true;
24 }
25 
26 int main()
27 {
28     bin[0] = 1;
29     for (int i = 1; i <= 300000; i++) bin[i] = bin[i - 1] * 2 % MOD;
30     int t, v, u;
31     scanf("%d", &t);
32     while (t--)
33     {
34         scanf("%d%d", &n, &m);
35         for (int i = 1; i <= n; i++) { G[i].clear(); col[i] = 0; }
36         for (int i = 0; i < m; i++)
37         {
38             scanf("%d%d", &u, &v);
39             G[u].push_back(v);
40             G[v].push_back(u);
41         }
42         bool flg = true;
43         ll ans = 1;
44         for (int i = 1; i <= n; i++)
45         {
46             if (col[i]) continue;
47             ll tmp = 0; c1 = c2 = 0;
48             if (!dfs(i, 1)) { flg = false; break; }
49             tmp = (bin[c1] + bin[c2]) % MOD;
50             ans = ans * tmp % MOD;
51         }
52         if (!flg) puts("0");
53         else printf("%lld\n", ans);
54     }
55     return 0;
56 }
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Dax Dax
3年前
如何使用vue中的nextTick
其实这个问题主要就是针对Vue的异步更新队列的理解,因为我们平时用的也比较少,所以很多时候都会忽略掉,但是如果我们在面试当中能比较详细的解答这个问题,那么我相信这应该会是一个闪光点,那话不多说,我们先来捋一下答题思路:答题思路:nextTick是什么?先来一个定义为什么需要他呢?异步更新队列实现原理解释什么地方使用到他呢?描述使用的场景如何使用他呢?描述使用
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Wesley13 Wesley13
3年前
ACM团队周赛题解(2)
拉了CF583和CF486的两套div2题目还是先贴宏定义部分defineMAXN10000005defineMOD1000000007definePI(acos(1.0))defineEPS1e6defineMMT(s,a)memset(s,a,sizeofs)define
Stella981 Stella981
3年前
Spring boot源码分析之Spring循环依赖揭秘
!(https://oscimg.oschina.net/oscnet/be79581de12c41704c44e976d329ad35ad1.gif)若你是一个有经验的程序员,那你在开发中必然碰到过这种现象:事务不生效。或许刚说到这,有的小伙伴就会大惊失色了。Spring不是解决了循环依赖问题吗,它是怎么又会发生循环依赖的呢?,接下来就
Stella981 Stella981
3年前
558. Quad Tree Intersection
https://leetcode.com/problems/quadtreeintersection/description/我觉得是用意挺好的一题目。求两个四叉树的逻辑union,可惜测试用例里面居然包含对题目外因素的检查(那个id)懒得弄了。思路其实挺简单,但是很容易忽略一个edgecase,就是当所有children的value都一致
Stella981 Stella981
3年前
LeetCode 5561. 获取生成数组中的最大值
文章目录1\.题目2\.解题1\.题目给你一个整数n。按下述规则生成一个长度为n1的数组nums:nums00nums11当2<2i<n时,nums2inumsi
Wesley13 Wesley13
3年前
38条技巧优化PHP代码,来复习总结下吧
1、如果一个方法能被静态,那就声明它为静态的,速度可提高1/4;2、echo的效率高于print,因为echo没有返回值,print返回一个整型;3、在循环之前设置循环的最大次数,而非在在循环中;4、销毁变量去释放内存,特别是大的数组;5、避免使用像\_\_get,\_\_set,\_\_autoload等魔术方法
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这