[POI2008]BLO-Blockade 【无向图tarjan/鸽点】By cellur925
lyd无向图tarjan的例题。
一句话题意(不得不佩服lyd老师的高度概括能力):在一张无向连通图上,求出每个点被破坏(去掉与这个点相关的所有边,不去掉这个点)后,无向图中使i,j不连通有序点对(i,j)个数。
浓浓的鸽点气息。
但是这题又不单单是鸽点。
我们冷静分析,分类讨论(分类讨论这个美好的品质常被oier所忽略)
每个点有两种类型:是鸽点/不是鸽点
一、不是鸽点
那么去掉这个点所连的所有边后,只有这个点和剩下的点不连通,而其他点还联系的好好地,所以答案即为2*(n-1),由于是无序点对,所以乘2.
二、是鸽点
那么图会分裂成几个联通块,答案是这几个联通块的大小两两相乘再相加。
我真懒,真的。
size[i]表示以i为根的子树大小。我们可以在tarjan跑鸽点的时候顺便求出。
大体思路就是这样,还是比较简单易懂的。
Code
#include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; int n,m,tot,num;
int head[],dfn[],low[];
bool cut[];
ll size[],ans[];
struct node{
int to,next;
}edge[]; void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
} void tarjan(int x)
{
dfn[x]=low[x]=++num;size[x]=;
int flag=;ll sigma=;
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(!dfn[y])
{
tarjan(y);
size[x]+=size[y];
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x])
{
flag++;
ans[x]+=1ll*size[y]*(n-size[y]);
sigma+=size[y];
if(x!=||flag>) cut[x]=true;
}
}
else low[x]=min(low[x],dfn[y]);
}
if(cut[x])//是鸽点
ans[x]+=1ll*(n-sigma-)*(+sigma)+(n-);
else //不是鸽点
ans[x]=1ll**(n-);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
if(x==y) continue;
//去掉自环
add(x,y);
add(y,x);
}
tarjan();
//图保证联通。只调用一次便足够。
//意念起点为1
for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
return ;
}
[POI2008]BLO-Blockade 【无向图tarjan/鸽点】By cellur925的更多相关文章
- BZOJ 1123: [POI2008]BLO( tarjan )
tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...
- bzoj 1123 [POI2008]BLO Tarjan求割点
[POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1540 Solved: 711[Submit][Status][Discu ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
- BZOJ1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ...
- BZOJ 1123 [POI2008]BLO(Tarjan算法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条r ...
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. ; maxm=; type edgetype=record toward,next:l ...
- 【bzoj1123】【[POI2008]BLO】tarjan判割点
(上不了p站我要死了,侵权度娘背锅) Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有t ...
- hdu 4612 Warm up(无向图Tarjan+树的直径)
题意:有N个点,M条边(有重边)的无向图,这样图中会可能有桥,问加一条边后,使桥最少,求该桥树. 思路:这个标准想法很好想到,缩点后,求出图中的桥的个数,然后重建图必为树,求出树的最长直径,在该直径的 ...
随机推荐
- 实验二:编写输出“Hello word!”
一:编写输出“Hello word!” 1.运行eclipse,在project name中输入要创建的项目名称. 2.创建java类,点击File->New->Class,在弹出窗口中N ...
- 转:TLV 格式及编解码示例
TLV是一种可变格式,意思就是: Type类型, Lenght长度,Value值: Type和Length的长度固定,一般那是2.4个字节(这里统一采用4个字节): Value的长度有Length指定 ...
- Enhance Magento 404 page
Magento default installation already has a predefined custom 404 page (no-route). But is it enough t ...
- ios开发 MPMoviePlayerController 视频播放器
项目中用到视频播放功能, 写点视频基础部分 MPMoviePlayerController是通过MediaPlayer.frame引入的,可用于播放在iOS支持的所有格式的视频,用起来很简单!!! M ...
- centos7备份还原与grub2引导和rescue模式修改root密码
一.centos7备份1.su -2.cd /3.tar -zpPcvf backup.tgz --exclude=/sys --exclude=/mnt --exclude=/proc --excl ...
- Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TAB
在linux下,用mysql的导出语句: mysqldump -hlocalhost -uroot -pPasswd table >/home/ftp/test.sql 出现了 mysqldum ...
- JIRA运行太慢,修改JVM
JIRA运行太慢,根据实际实况,修改JVM内存大小 2. 非NT服务修改JVM内存大小 修改%JIRA_HOME%/bin下面的setenv.bat文件,修改JAVA_OPTS这个环境变量 set J ...
- sublime text 3 乱码
sublime text 是一款很好用的文字编辑软件,可谓是程序员必备,但是最近发现在mac端使用的时候,中文乱码, 网上一些解决方案,抄袭严重,没有解决实际问题,所以记录下自己解决问题的过程. 1. ...
- openxml in sql server
OPENXML (Transact-SQL) OPENXML provides a rowset view over an XML document. Because OPENXML is a row ...
- 一步一步学Silverlight 2系列(3):界面布局
述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...