【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
来源:互联网 发布:unity3d素材免费资源 编辑:程序博客网 时间:2024/05/18 19:44
题目概述
给出
解题报告
和YZ哥哥一起打AtCoder……被切了C的YZ哥哥虐翻……
首先我们会发现如果有一组满足的点对
那么我们可以得出重要结论:初始图中距离为奇数的点对
接着就会发现距离为奇数这个性质和二分图奇环很有联系,于是:
- 原图是二分图:走奇数步不会成环,也就是说左
L 右R 都有边相连,即最终图的边数是L×R 。 - 原图不是二分图:走奇数步会成环,也就是说所有点都会相连,即最终图的边数是
n×(n−1)÷2 。
示例程序
#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;typedef long long LL;const int maxn=100000,maxm=100000;int n,m,col[maxn+5],A,B;int E,lnk[maxn+5],son[maxm*2+5],nxt[maxm*2+5];inline void Add(int x,int y) {son[++E]=y;nxt[E]=lnk[x];lnk[x]=E;}void Dfs(int x,int now=0,int fa=0){ col[x]=now;now^=1; for (int j=lnk[x];j;j=nxt[j]) { if (col[son[j]]==-1) Dfs(son[j],now,x); if (col[son[j]]!=now) printf("%lld\n",(LL)n*(n-1)/2-m),exit(0); }}int main(){ freopen("C.in","r",stdin); freopen("C.out","w",stdout); scanf("%d%d",&n,&m);memset(col,255,sizeof(col)); for (int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),Add(x,y),Add(y,x); Dfs(1);for (int i=1;i<=n;i++) if (col[i]) A++; else B++; return printf("%lld\n",(LL)A*B-m),0;}
阅读全文
1 0
- 【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
- Atcoder CODE FESTIVAL 2017 qual C 总结+ABCD题解
- Atcoder CODE FESTIVAL 2017 qual C D
- [Atcoder CODE FESTIVAL 2017 qual C]D
- 【AtCoder CODE FESTIVAL 2017 qual C】D
- CODE FESTIVAL 2017 qual B:C
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual C
- CODE FESTIVAL 2017 qual C- A-B-C 总结
- CODE FESTIVAL 2017 qual C C
- Atcoder Code Festival 2016 Qual A D
- CODE FESTIVAL 2017 qual A C
- Atcoder CODE FESTIVAL 2017 Final 简要题解
- AGC CODE FESTIVAL 2017 qual A(部分题解)
- CODE FESTIVAL 2017 qual A
- atcoder CODE FESTIVAL 2017 qual A 手速(雾)赛
- AtCoder GC 018B: Sports Festival 题解
- Android 简易计算器实现
- install cuda on ubuntu
- 爬取天气数据+热力图
- LightOJ
- Yarn 内存分配管理机制及相关参数配置
- 【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
- 二分法查找的bug与解决
- python实现根据指定字符截取对应的行的内容
- yii2 在表单里 文件上传 为可选择,不再必须上传
- LeetCode 76. Minimum Window Substring
- 天才程序员 Fabrice Bellard
- 第三章 爬虫和蜘蛛
- Week3Day3
- URL编码