[AGC006F]Blackout
Aufun带我做题辣!显然这种神仙题并不是我该碰的==
不过既然看了题解还看懂了就写一篇题解记录一下子吧。
首先如果你不能把题转化成“如果x->y有边,y->z有边,就可以往z->x上加一条边,求最后有多少条边”这种形式的话那就没法做了。。
知道这么做了以后我们考虑环对答案的影响
首先一个三元环对答案的贡献是三条边
比三元环大的环其实不用考虑,因为最后一定会被缩成许多个三元环二元环或自环
如果产生了一个二元环,它对答案的贡献只有2吗?NO!
每一个点都会通过环回到自己而这样以后,任何连向这两点的点都会和这两点建出双向边
最后整个联通块会变成一个完全图,而且每个点和自己还连有一条边,对答案的贡献则是size*size
而如果一个联通块内没有环,那么就不会产生新的边,联通块对答案的贡献就是边数
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define ll long long 5 #define M 100010 6 using namespace std; 7 struct point{ 8 int to,next,f; 9 }e[M<<1]; 10 int n,m,num; 11 ll tot1,tot2,ans; 12 int head[M],co[M]; 13 ll cnt[5]; 14 bool flag; 15 bool vis[M]; 16 void add(int from,int to,int f) 17 { 18 e[++num].next=head[from]; 19 e[num].to=to; 20 e[num].f=f; 21 head[from]=num; 22 } 23 void dfs(int x) 24 { 25 vis[x]=true; tot1++; 26 cnt[co[x]]++; 27 for(int i=head[x];i;i=e[i].next) 28 { 29 int to=e[i].to; 30 tot2+=e[i].f==1; 31 if(!vis[to]) 32 { 33 co[to]=(co[x]+e[i].f+3)%3; 34 dfs(to); 35 } 36 else if(co[to]!=(co[x]+e[i].f+3)%3) flag=true; 37 } 38 } 39 int main() 40 { 41 scanf("%d%d",&n,&m); 42 for(int i=1;i<=m;i++) 43 { 44 int x,y; scanf("%d%d",&x,&y); 45 add(x,y,1); add(y,x,-1); 46 } 47 for(int i=1;i<=n;i++) 48 { 49 if(!vis[i]) 50 { 51 flag=false; 52 tot1=tot2=0; 53 cnt[0]=cnt[1]=cnt[2]=0; 54 dfs(i); 55 if(flag) ans+=tot1*tot1; 56 else if(cnt[0]&&cnt[1]&&cnt[2]) ans+=cnt[0]*cnt[1]+cnt[1]*cnt[2]+cnt[2]*cnt[0]; 57 else ans+=tot2; 58 } 59 } 60 printf("%lld",ans); 61 return 0; 62 }
转载于:https://www.cnblogs.com/Slrslr/p/9534665.html
[AGC006F]Blackout相关推荐
- UVA 10600 ACM Contest and Blackout (次小生成树)
题目大意: 给n个节点,m条边,问最小生成树,次小生成树? ps:以前做次小生成树的时候估计没有掌握牢固,这次wa的好辛苦哟. 1 #include <cmath> 2 #include ...
- 1977中文版_历年星云、雨果获奖长篇中文版汇总
有知友说"星云.雨果获奖长篇小说国内引进不多"--你看你看,这就是"不关心".简单列一下历年星云.雨果长篇小说的中文版.有的小说多次引进,以最新版为准. 195 ...
- 黑马程序员 交通灯案例
---------------------- android培训.java培训.期待与您交流! ---------------------- 通过张老师的交通灯的例子我认识到了很多:首先是要结合现实生 ...
- DLM:微信大规模分布式n-gram语言模型系统
来源 | 微信后台团队 Wechat & NUS<A Distributed System for Large-scale n-gram Language Models at Tence ...
- unix oracle控制台,Linux平台下启动oracle11gEM控制台
当我们的oracle服务器是使用的Linux/Unix系统时,我们从windows或者其他的客户端想用启动oracle的EM工具了解一些系统系统信息时可 当我们的Oracle服务器是使用的Linux/ ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
- 论文荐读 | NLP之Attention从入门到精通
https://www.toutiao.com/a6709249369914212872/ Sequence to Sequence Learning with Neural Networks seq ...
- OpenCV对象检测实例
https://www.toutiao.com/a6644490462834983438/ 2019-01-09 21:36:31 在本文中,我将演示如何跟踪传送带上的对象.这可以用于在传送带上定位对 ...
- 别让用户发呆——设计中的防呆策略
http://kb.cnblogs.com/page/190039/ 生活中总会有些状况让我们无所适从摸不着头脑:面对一排电灯或空调的按钮,哪个才是控制我想要的?开锁时掏出一把钥匙,哪个才是正确的?拿 ...
- 全球三大BCH(比特币现金)城市,有你想去的吗
加密货币发展到现在,可能有很多人已经忘了比特币是用来干什么的了,它是一种可以被用来支付的货币,抗审查和抗通胀的货币属性才是它存在的意义,但随着其核心开发团队的理念跑偏,他们认为比特币的储值属性优于支付 ...
最新文章
- 【HDU】1005 Number Sequence (有点可爱)
- python语言中文社区-python解决中文
- Java黑皮书课后题第5章:**5.34(游戏:石头、剪刀、布)编程练习题3.17给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止
- linux远程计算,如何使用Linux应用服务器场的远程计算?
- 技术专题:厦门9月30日限制路由(网络尖冰),WAYOS或ROS解决方案
- 斯大林格勒拖拉机厂LCA项目研制成功
- 京东动态页面爬虫 scrapy+selenium
- Kubernetes 搭建 Kafka 和 Zookeeper 集群(完整教程)
- 4.3配置自定义情况的Bean实例
- H - 数论中的异或 HRBUST - 1688
- 【Deep learning】NLP
- 【预测模型】Gompertz 曲线方程预测
- Life feelings--9--Mamba out 科比走了,给我们留下的那些惦念
- 基于TX2的全向四轮小车搭建(一)
- 华为手机充当电脑的无线U盘 - 华为无线连接电脑 - 华为分享
- [NOIP2010 普及组] 三国游戏 题解
- 人类像计算机一样思考 议论文,人工智能时代——人应像人一样思考作文800字...
- 不降价的促销利器--让渡营销
- (5)CC3200学习之串口
- PGSQL 日期时间的比较