博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtCoder Grand Contest 006 F - Blackout
阅读量:4979 次
发布时间:2019-06-12

本文共 1728 字,大约阅读时间需要 5 分钟。

Description

\(n*n\) 的棋盘上给出 \(m\) 个黑点,若 \((x,y)\),\((y,z)\) 都是黑点,那么 \((z,x)\) 也会变成黑点,求最后黑点的数量

Solution

把点 \((x,y)\) 看作一条从 \(x\)\(y\) 的有向边

我们分析性质:
如果存在一个自环,那么这个点所在的连通块就会变成一个完全图
原因是和这个点有单向边的点都会变成双向边,有双向边之后就会形成自环,那么就可以一直重复这个过程,就变成了完全图

我们想办法判断图中有没有自环,我们发现:对原图进行三染色之后:

1.如果产生了矛盾,那么就有自环,就会形成一个完全图,这个连通块的答案就是点数的平方
2.如果染色完成了,那么算出产生的边的个数和原图边的个数就行了

对于第二种情况,还需要一些性质:

首先如果 \(color[x]±1 \mod 3 =color[u]\)\(x,u\) 在同一连通块内,则一定有边存在
所以设 \(a[x]\) 表示颜色为 \(x\) 的点的数量,答案就是 \(a[1]*a[2]+a[2]*a[3]+a[1]*a[3]\)

#include
using namespace std;typedef long long ll;const int N=1e5+10;int n,m,head[N],nxt[N*2],to[N*2],num=0,c[N],E=0,a[4],dis[N*2];bool flag=0,vis[N*2];vector
S;inline void link(int x,int y,int z){ nxt[++num]=head[x];to[num]=y;head[x]=num;dis[num]=z;}inline void dfs(int x){ S.push_back(x); for(int i=head[x];i;i=nxt[i]){ int u=to[i],t=c[x]+dis[i]; if(!vis[i])vis[i]=1,E++; if(!t)t=3;if(t==4)t=1; if(c[u]){ if(c[u]!=t)flag=1; } else c[u]=t,dfs(u); }}int main(){ freopen("pp.in","r",stdin); freopen("pp.out","w",stdout); int x,y;ll ans=0; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&x,&y); link(x,y,1);link(y,x,-1); } for(int i=1;i<=n;i++){ if(!c[i]){ vector
().swap(S);c[i]=1;flag=0;E=0; dfs(i); memset(a,0,sizeof(a)); for(int j=S.size()-1;j>=0;j--)a[c[S[j]]]++; if(flag)ans+=(ll)S.size()*S.size(); else if(!a[1] || !a[2] || !a[3])ans+=E/2; else ans+=1ll*a[1]*a[2]+1ll*a[2]*a[3]+1ll*a[1]*a[3]; } } cout<
<

转载于:https://www.cnblogs.com/Yuzao/p/8678151.html

你可能感兴趣的文章
Oracle database link
查看>>
python调用shell小技巧
查看>>
TL431的几种常用用法
查看>>
js 经典闭包题目详解
查看>>
在项目中移除CocoaPods
查看>>
【洛谷】CYJian的水题大赛【第二弹】解题报告
查看>>
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
纵越6省1市-重新启动
查看>>
hive安装以及hive on spark
查看>>
jz1074 【基础】寻找2的幂
查看>>
Wannafly模拟赛5 A 思维 D 暴力
查看>>
【Linux开发】CCS远程调试ARM,AM4378
查看>>
Linux之ssh服务介绍
查看>>
排序:冒泡排序
查看>>
Java中instanceof关键字的用法总结
查看>>
引用类型-Function类型
查看>>
(转)Android 仿订单出票效果 (附DEMO)
查看>>
数据库多张表导出到excel
查看>>