牛客网 【每日一题】4月23日题目精讲 边的染色

链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

小团有一张n个点,m条边的无向图G,有些边上已经被标记了0或1,表示它的边权。
现在你需要给剩下的边标记边权为0或1,求有几种标记的方式满足:
对于G中任意一个环,里面所有边的边权的异或值为0。
环的定义如下:
对于任意k(k≥2)个点{a1,a2,...,ak},若对于所有的i<k满足ai与ai+1之间有边,且a1=ak成立,则这k个点构成一个环。

输入描述:

第一行两个整数n, m。

接下来m行,每行3个整数u, v, w,表示有一条边(u,v),若w=-1则这条边上没有标记,否则w=0或1表示这条边上标记了w。

数据保证没有重边和自环。

1≤n≤100,000 0≤m≤min(n*(n-1)/2, 100000)

输出描述:

输出方案数对998,244,353取模的值。

示例1
输入
3 3
1 2 -1
2 3 -1
3 1 -1
输出
4

题解:

看了邓老师的题解,恍然大悟,感谢大佬讲解
一下为我结合邓老师所理解的:
首先思考:一个连通图(图中任意两点都是连通的),给边标上0和1,使得任意一个环的所有边的异或和为0,问有多少种方案?

异或:相同为0,不同为1

题目要求我们给边赋值,但是边赋值很不方便,我们就看看选择给点赋值,为什么?因为边和点是共存的,特别是在一个环中,每个点都贡献了两个边,那我们就可以把这个边的值当做是边两端顶点的值的异或,一个环有m个点,m条边,异或m条边就等于将m个点都异或两次。相同为0,那么异或两次相同的值结果一定为0.那点就可以随意赋值

对于一个连通块:
将所有点的数都 ^ 1(也就是0变成1,1变成0),两点异或出来的边值并未发生改变(就相当于原本1 ^ 1 改成0 ^ 0,结果不变),n个点每个点都是有两个方案的(即0或1),那么给点赋值的方案也就是2n个,对应的边赋值方案是点的方案除以2,所以n个点的连通图有2n-1种方案。

对于不是一个连通图:
我们可以求分散的每个连通图种类,然后乘一起就可

但是原本题目中是存在有些边一开始就赋好值,我们可以从提前标好的边开始出发找连通块,不然到最后你自己标记的很有可能和题目给你不适配,又要重新改。在存有题目给的边的这个连通块里,我们只需要确定一个点的权值,其他部分也可以因此确定。如果把这个连通块大小记作ki,那么这个连通块的存在就会使得方案数需要在原来的基础上(不考虑之前有标记)除以2 ki-1,因为其他点不能自由选。

还有:题目给你的数据本身可能就是矛盾,判定远直接输出0
我尽量只能理解到这份上。。

借鉴其他大佬的代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 3;
const int mod = 998244353;
int f[maxn], col[maxn];
vector<pair<int,int> > edge[maxn];
bool flag;
int find(int x){return f[x] == x ? x : f[x] = find(f[x]);
}
void dfs(int u, int p){//染色过程if (!flag) return;for (int i = 0; i < edge[u].size(); ++i){int v = edge[u][i].first, w = edge[u][i].second;if (col[v] == -1){col[v] = col[u]^w;dfs(v, u);}else if (col[u]^col[v] != w){flag = 0;return;}}
}
int main(void){int n, m,ans; int u, v, w;scanf("%d%d",&n,&m);for (int i = 1; i <= n; ++i) f[i] = i;ans = n;for (int i = 1; i <= m; ++i){cin >> u >> v >> w;if (find(u) != find(v)){ans--;f[find(u)] = find(v);/}if (w != -1){edge[u].push_back(make_pair(v, w));edge[v].push_back(make_pair(u, w));}}memset(col, -1, sizeof col);int cnt = 0;flag = 1;for (int i = 1; i <= n; ++i){if (col[i] == -1){col[i] = 0;dfs(i, i);cnt++;}}if (!flag){cout << 0 << endl; return 0;}ll ans = 1;for (int i = 0; i < cnt-ans; ++i) ans = ans*2%mod;cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中的 ORM 之 Dapper

Dapper简介Dapper是.NET的一款轻量级ORM工具&#xff08;GitHub&#xff09;&#xff0c;也可称为简单对象映射器。在速度方面拥有微型ORM之王的称号。它是半自动的&#xff0c;也就是说实体类和SQL语句都要自己写&#xff0c;但它提供自动对象映射。是通过对IDbConnection接口…

P1446-[HNOI2008]Cards【Burnside引理,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P1446 题目大意 三个颜色的一些东西排在一起&#xff0c;给mmm种置换&#xff0c;求本质不同的染色方案数。 解题思路 BurnsideBurnsideBurnside引理&#xff1a;置换集合GGG时本质不同的序列方案等于∑x∈Gc(x)∣G∣\frac{\…

传送门(最短路树+可并堆)

Description 有一张n个点m条边的无向图&#xff0c;求删去任意一条边后&#xff0c;从S到T的最短距离的最大值 n, m ≤ 21052 \times 10^52105 Solution 这道题是[USACO09JAN]Safe Travel的变形&#xff0c;然后这是题解 Safe Travel这道题的普遍做法是并查集或树剖&#…

【DP】Mobile Service(jzoj 1327)

Mobile Service jzoj 1327 题目大意 某公司有三个员工&#xff0c;现在有n个时刻&#xff0c;某一时刻要一个员工到一个位置&#xff08;别的员工不能动&#xff09;&#xff0c;代价为ci,jc_{i,j}ci,j​&#xff0c;一个位置一个时刻最多有一个人&#xff0c;问最小代价是多…

用WinForm/WPF代码来为.NET Core 3.0功能投票

我们在5月报道过微软希望在.NET Core 3.0上运行WinForms和WPF。为了实现这个目标&#xff0c;他们正在构建一个新工具&#xff0c;该工具将允许你投票以决定他们需要把哪些API移植到.NET Core。但是&#xff0c;这不是一次直接进行的投票&#xff0c;而是基于你的应用程序正在使…

病毒扩散

链接&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200429210705568.png?x-oss-processimage/waterm…

P3200-[HNOI2009]有趣的数列【卡特兰数】

正题 题目链接:https://www.luogu.com.cn/problem/P3200 题目大意 求一个长度为2∗n2*n2∗n的排列要求 奇数位和偶数位分别递增相邻的偶数位大于奇数位 解题思路 可以看做是一个2∗n2*n2∗n的序列按顺序填进奇数和偶数位&#xff0c;然后因为第二个要求所以奇数位在任何时候…

【SPFA】Party(jzoj 1328)

Party jzoj 1328 题目大意 有一个有向图&#xff0c;给你一个x&#xff0c;让你求每一个点到x再回去的最短路径&#xff0c;输出所有最短路径的最大值 输入样例 4 8 2 1 2 4 1 3 2 1 4 7 2 1 1 2 3 5 3 1 2 3 4 4 4 2 3输出样例 10 样例解释 数据范围 1⩽x⩽N⩽10001\le…

【每日一题】4月27日题目精讲 Removal

链接&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld题目描述 Bobo has a sequence of integers s1, s2, …, sn where 1 ≤ si ≤ k. Find out the number of distinc…

[CF966E] May Holidays(树上数据结构问题、分块+虚树)

Description 一个 n 个结点的有根树&#xff0c;每个结点 x 有一个值 txt_xtx​&#xff0c;和一个颜色 (黑/白)。 m 次操作&#xff1a; 翻转某点颜色。询问有多少点 x 满足&#xff1a;x 为黑色&#xff0c;x 的白色后代数 > tx。 n, m ≤ 10510^5105 Solution 令 wi …

Asp.Net Core 2.2.0-preview1已经发布

原文地址 ASP.NET Core 2.2.0-preview1 now available今天我们很高兴地宣布,现在可以试用ASP.NET Core和.NET Core的下一个次要版本的第一个预览。在过去的几个月里&#xff0c;我们和社区里的许多人一起为这个版本进行开发&#xff0c;现在它已经准备好让更广泛的受众尝试它并…

YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】

正题 题目链接:https://www.ybtoj.com.cn/contest/70/problem/3 题目大意 一棵树nnn个节点&#xff0c;每条边(x,y,a,b)(x,y,a,b)(x,y,a,b)&#xff0c;可以花费111的代价让一条边的a,ba,ba,b都减去111&#xff0c;但是不能小于000&#xff0c;要求最少代价使得每条边满足yyy…

纪中B组模拟赛总结(2020.2.13)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4141414lyflyflyf200200200100100100000000100100100 总结 今天真改“滚”QAQ T1一开始不会&#xff0c;最后才来做&#xff0c;发现了题目的精髓&#xff0c;才切掉 T2打了个ST表&#xff0c;MLE&#x…

牛客网【每日一题】4月28日题目精讲 美味菜肴

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小明是个大厨&#xff0c;早上起来他开始一天的工作。他所在的餐厅每天早上都会买好n件食材&#xff08;每种…

UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)

Description 一棵 n 个点的有根树&#xff0c;带点权 wi。 从 s 出发&#xff0c;希望达到 t&#xff0c;每秒可以从当前点移动到某一个儿子。 有一个死亡次数&#xff0c;初始为 0。若在某个点 i(i ! s, t) 时&#xff0c;死亡次数 ≤ wi&#xff0c;那么死亡次数自增 1&…

C#系列之聊聊.Net Core的InMemoryCache

这两天在看.net core的in memory cache&#xff0c;这里记录一下用法&#xff0c;主要涉及MemoryCache的Get&#xff0f;Set&#xff0f;Expire&#xff0f;Flush。首先我们先用dotnet命令创建一个mvc的项目&#xff0c;这里我们将使用postman来请求server&#xff0c;1dotnet …

P1412-经营与开发【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P1412 题目大意 nnn个地点&#xff0c;有一个能力值为www的稿子 如果地点iii是资源型的&#xff0c;那么可以选择获得ai∗wa_i*wai​∗w的价值&#xff0c;且ww∗(1−k100)ww*(1-\frac{k}{100})ww∗(1−100k​)如果地点iii是…

纪中在家培训总结(2020.2.1~2020.2.24)

前言 因为新型冠状病毒&#xff08;疫情情况&#xff09;的原因&#xff0c;纪中培训改为在家培训&#xff0c;一天的进度变成了两天甚至三天的进度QAQ&#xff0c;但我还是想说&#xff1a;武汉加油&#xff01;中国加油&#xff01; 这次培训总结没啥好写&#xff0c;请勿嘲…

CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)

Description 一棵 n 个点的树&#xff0c;点权最初为 1 ∼ n 的排列。 定义一个删点过程&#xff1a;每次找到权值最小的叶子&#xff0c;删去它以及连接的边&#xff0c;重复这个过程直到剩下一个点&#xff0c;然后删去最后的点。 处理 q 个询问&#xff1a; 将一个点 x 的…

小石的签到题

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 共一行&#xff0c;输入一个数 n 。 输出描述: 共一行&#xff0c;输出 “Shi” 或 “Yang”&…