3896. 【NOIP2014模拟10.26】战争游戏

鉴于如此一道恶心的题,作者还花了一个晚上草草学了tarjan。


于是乎,这道题就是道tarjan
具体怎么实现呢?正解上有个什么树形DP,看的我一脸懵逼。
这道题可以运用到tarjan一个高科技的算法叫——割点。
这里就不再介绍怎么打tarjan了,切入正题。
我们先回忆下割点。
也就是在一个无向图中,将一个点G及其相关的边全部扔掉,会使这个图不在联通,便称点G为割点(作者个人理解)
看完上面的,是不是感觉和题目大意有点相像?

我先在做tarjan的同时可以很轻松的求得其子节点的数量,从而得知联通块的大小(如蓝色圆圈,紫色圆圈及橙色圆圈)然后很自然的就能求出子节点的方案数
由上面,也很容易推出绿色圆圈}的方案数
#include<cstdio>
#include<algorithm>
#define N 50001
using namespace std;
int n,m,i,x,y,to,t,low[N],ans[N],dfn[N],last[200001],num[N];
struct node
{
int go,last;
}p[200001];
void make(int x,int y){p[++t].go=y;p[t].last=last[x];last[x]=t;}
void tarjan(int x)
{
num[x]=1; dfn[x]=low[x]=++to;
int tot=0;
for (int i=last[x];i;i=p[i].last)
{
int y=p[i].go;
if (!dfn[y])
{
tarjan(y);
low[x]=min(low[x],low[y]);
if (dfn[x]<=low[y])
{
ans[x]+=num[y]*(n-1-num[y]);
tot+=num[y];
}
num[x]+=num[y];
}else low[x]=min(low[x],dfn[y]);
}
ans[x]+=tot*(n-1-tot);
}
int main()
{
freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
make(x,y); make(y,x);
}
to=0;
tarjan(1);
for (i=1;i<=n;i++) printf("%d\n",ans[i]/2+n-1);
}
3896. 【NOIP2014模拟10.26】战争游戏的更多相关文章
- jzoj5929. 【NOIP2018模拟10.26】情书
动态规划: #include<bits/stdc++.h> using namespace std; int n,iv[30]; #define mo 998244353 typedef ...
- 【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护
CCC 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成一个无向图,定义 ...
- [jzoj 5930] [NOIP2018模拟10.26】山花 解题报告 (质因数分类)
题目链接: http://172.16.0.132/senior/#contest/show/2538/2 题目: 小S决定从某一个节点$u$开始对其子树中与$u$距离小于$K$的节点代表的花树进行采 ...
- 【NOIP2014模拟10.25A组】画矩形
题目 分析 由于要求按时间顺序来操作,考虑整体二分: 对于一段二分出来的区间,将左区间的修改和右区间的查询取出来,每次更新每个查询的答案,正确性显然. 现在有一对修改和查询的操作(保证所有的查询都在修 ...
- 【长郡NOIP2014模拟10.22】搞笑的代码
题目 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...
- 【JZOJ3887】【长郡NOIP2014模拟10.22】字符串查询
haf 给定n个字符串和q个询问 每次询问在这n个字符串中,有多少个字符串同时满足 1. 字符串a是它的前缀 2. 字符串b是它的后缀 100%数据满足n,q≤50000,字符串长度丌超过100,任意 ...
- 【JZOJ3885】【长郡NOIP2014模拟10.22】搞笑的代码
ok 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...
- 2018.10.26 浪在ACM 集训队第四次测试赛
2018.10.26 浪在ACM 集训队第四次测试赛 题目一览表 来源 考察知识点 完成时间 A 生活大爆炸版 石头剪刀布 NOIP 提高组 2014 模拟??? 2018.11.9 B 联合 ...
- P3866 [TJOI2009]战争游戏
P3866 [TJOI2009]战争游戏 题目背景 小R正在玩一个战争游戏.游戏地图是一个M行N列的矩阵,每个格子可能是障碍物,也可能是空地,在游戏开始时有若干支敌军分散在不同的空地格子中.每支敌军都 ...
随机推荐
- powerMock和mockito使用
powerMock和mockito powermock和mockito都是做mock的框架,powermock在mockito的基础上扩展而来,支持mockito的操作(也支持别的mock框架比如ea ...
- 读取topic数据存储到文件内
基于python3.6 from pykafka import KafkaClient import logging logging.basicConfig(level=logging.INFO) d ...
- JavaScript设计模式之策略模式【组合委托】
前言:语言只是工具,思想才是核心 今天要总结的是 策略模式 策略在开发中的应用非常广泛,所以也是非常常见且使用的设计模式. 在实际开发中,往往在实现一个功能时,有多种解决方案可行. 常见场景: 解压: ...
- Scala中的Map集合
1. Map集合 1.1 Scala中的Map介绍 Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的M ...
- win10中搭建Linux子系统
win10自带的Linux子系统,简称WSL(Windows Subsystem for Linux).优点是打通了Linux系统和windows系统,改变了传统虚拟机/双系统造成的两个系统相互隔绝的 ...
- SwitchyOmega 配置
1.google 扩展程序里面的chrome 网上应用店里面安装Proxy SwitchyOmega 2.新建情景模式 3.配置代理 4.自动切换添加新建的情景模式,最后保存
- appium配置
前言 最近报了个班,学习关于全栈自动化相关内容.学归学.培训就像敲门砖,领人入门,同时可以比较系统性的给学习到关于这块的基础知识(比较好的培训机构).其次想着总结一些培训知识和遇到的一些问题,以供自己 ...
- 第5篇 Scrum冲刺博客
1.站立式会议 1.1 会议图片 1.2 项目进展 成员 昨日任务 今日计划完成任务 陈忠明 歌曲信息的上传/下载包 歌曲批量下载压缩包 吴茂平 完善评论系统 新消息提醒功能设计 黄海钊 修改代码规范 ...
- 怎么给Ubuntu Server安装GUI桌面
sudo apt update sudo apt upgrade sudo add-apt-repository universe sudo add-apt-repository multiverse ...
- 据说这个是可以撸到2089年的idea2020.2
声明:本教程 IntelliJ IDEA IDEA2020.2破解 激活方式均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除 注意: 本教程适用于 JetBrains 全系列产品 I ...