CF1093D Beautiful Graph

思路:

题目倒是没啥好说的,就是注意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 }

原文地址:https://www.cnblogs.com/wangyiming/p/10127419.html

时间: 2024-10-10 14:40:26

CF1093D Beautiful Graph的相关文章

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

<题目链接> 题目大意: 给你一个无向图(该无向图无自环,且无重边),现在要你给这个无向图的点加权,所加权值可以是1,2,3.给这些点加权之后,要使得任意边的两个端点权值之和为奇数,问总共有多少种可能?结果mod 998244353. 解题分析: 整张图的所有顶点赋权之后,一定分为奇.偶两部分点集,并且,要想使的该图满足条件,任意边的两个端点的奇偶性应该是不同的,所以我们可以用DFS对图进行二分图染色,将图分为两个部分,需要注意的是,该图未必连通.然后就是DFS的过程中,如果下一个点已经染过色

Educational Codeforces Round 56 (Rated for Div. 2)

涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<set> #include<map> #include<vector> #include<c

Educational Codeforces Round 56 (Rated for Div. 2) ABCD

题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次,能使扔出的总和等于xi. 题解: 由于是special judge,模拟一下搞搞就行了= = 代码如下: #include <bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; int n; while(t--

Educational Codeforces Round 56 Editorial

A.Dice Rolling 题意:Mishka 有一个六面的骰子,每面分别为 2 ~ 7,而且 Mishka 是欧皇,可以控制自己每次掷到的数字.Mishka 现在想掷若干次骰子,使得掷到的点数总和为 x,请求出任意一种掷骰子的方案,并输出掷骰子的次数.由于 Mishka 很好奇不同数字的方案,所以有 t 组询问. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3e5+10

CF每日一练(2.10)

CF-1093 1093A - Dice Rolling 输出x/2即可 #include<bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while (t--) { int x; cin >> x; cout << x / 2 << endl; } return 0; } 1093B - Letters Rearranging 当且仅当字符串中所有字符都相同时,

CF-1093 (2019/02/10)

CF-1093 1093A - Dice Rolling 输出x/2即可 #include<bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while (t--) { int x; cin >> x; cout << x / 2 << endl; } return 0; } 1093B - Letters Rearranging 当且仅当字符串中所有字符都相同时,

HDOJ 4888 Redraw Beautiful Drawings

最大流判断多解 建图: 源点连接到每一个代表行的节点容量为行总和,每一个代表列的节点连接到汇点容量为列总和,行和列之间互相连接容量为Limit 多解: 做一遍ISAP后,在残量图上DFS看能否找到点数大于2的环即可 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3519    Acc

HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点   源点 到行连流量为 所给的 当前行之和.    每行 连到每一列 一条流量为  k的边,每列到汇点连 列和.如果流量等于总和则有解,反之无解(如果列总和不等于行总和也无解).  判断方案是否唯一 找残留网络是否存在长度大于2的环即可,有环说明不唯一. #include<cstdio> #include<cstring&

ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 &amp;&amp; 组合数学 &amp;&amp; 大数)

Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of edges ME such that no two edges in the matching M share a common vertex. The Nobel Prize in XiXiHaHa was awarded to Jerryxf team, amongst other things,