做法

考虑边数限制的特殊条件,显然答案仅有\(\{0,1,2,3\}\)

  • 0:不联通

  • 1:连通

  • 2:边双连通

  • 3:任意删掉一条边都为边双连通

考虑每次删边后记录各点的边双染色情况来特判\(3\):是否所有情况都相同

Code

#include<bits/stdc++.h>
typedef int LL;
typedef long long ll;
const LL maxn=1e6+9,inf=0x3f3f3f3f;
const ll base_1=233,base_2=2333,mod1=99991,mod2=99989;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL to,nxt;
}dis[maxn];
LL n,m,top,num,nod,tim,ban,ans;
LL head[maxn],col[maxn],sta[maxn],dfn[maxn],low[maxn],f[maxn],hash_1[maxn],hash_2[maxn];
ll hash1[maxn],hash2[maxn];
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]}; head[u]=num;
}
void Tarjan(LL u,LL fa){
dfn[u]=low[u]=++tim; sta[++top]=u;
for(LL i=head[u];i;i=dis[i].nxt){
LL v(dis[i].to);
if(v==fa || i==ban || i==ban-1) continue;
if(!dfn[v]){
Tarjan(v,u); low[u]=std::min(low[u],low[v]);
}else low[u]=std::min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
LL now; ++nod;
do{
now=sta[top--]; col[now]=nod;
}while(now!=u);
}
}
LL Find(LL x){
return f[x]==x?x:f[x]=Find(f[x]);
}
inline void Union(LL u,LL v){
f[Find(u)]=Find(v);
}
int main(){
n=Read(); m=Read();
for(LL i=1;i<=n;++i) f[i]=i;
for(LL i=1;i<=m;++i){
LL u(Read()),v(Read());
Add(u,v); Add(v,u);
Union(u,v);
}
for(LL i=1;i<=n;++i)
if(!dfn[i])
Tarjan(i,0);
for(LL i=1;i<=n;++i)
for(LL j=i+1;j<=n;++j)
ans+=(Find(i)==Find(j)) + (col[i]==col[j]);
for(ban=2;ban<=(m<<1);ban+=2){
memset(dfn,0,4*(n+1)); nod=top=tim=0;
for(LL i=1;i<=n;++i)
if(!dfn[i])
Tarjan(i,0);
for(LL i=1;i<=n;++i){
hash_1[i]=(hash_1[i]*base_1%mod1+col[i])%mod1;
hash_2[i]=(hash_2[i]*base_2%mod1+col[i])%mod2;
}
}
for(LL i=1;i<=n;++i)
for(LL j=i+1;j<=n;++j)
ans+=(hash_1[i]==hash_1[j] && hash_2[i]==hash_2[j]);
printf("%d\n",ans);
return 0;
}

[CERC2015]Juice Junctions(边双连通+字符串hash)的更多相关文章

  1. bzoj4435: [Cerc2015]Juice Junctions(最小割树+hash)

    传送门 首先最大流等于最小割,那么可以转化为最小割树来做(不知道什么是最小割树的可以看看这题->这里) 具体的做法似乎是$hash[i][j]$表示最小割为$i$时点$j$是否与$S$连通 然后 ...

  2. 【BZOJ4435】[Cerc2015]Juice Junctions Tarjan+hash

    [BZOJ4435][Cerc2015]Juice Junctions Description 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都 ...

  3. BZOJ 4435 [Cerc2015]Juice Junctions 分治最小割+hash

    分治最小割的题目,要求n2. 之前用的n3的方法自然不能用了. 于是用hash,设hash[i][j]表示在最小割为i的时候,j是否与S联通. 看懂这个需要理解一下最小割树的构造. 这种题建议用EK写 ...

  4. BZOJ4435 : [Cerc2015]Juice Junctions

    最大流=最小割,而因为本题点的度数不超过3,所以最小割不超过3,EK算法的复杂度为$O(n+m)$. 通过分治求出最小割树,设$f[i][j][k]$表示最小割为$i$时,$j$点在第$k$次分治过程 ...

  5. BZOJ4435——[Cerc2015]Juice Junctions

    0.题目大意:求两点之间的最小割之和 1.分析:很明显,最小割树,我们发现这个题并不能用n^3的方法来求答案.. 所以我们记录下所有的边,然后把边从大到小排序,然后跑一边类似kruskal的东西,顺便 ...

  6. 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash

    4435: [Cerc2015]Juice Junctions Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 20  Solved: 11[Submi ...

  7. HDU 3849 By Recognizing These Guys, We Find Social Networks Useful(双连通)

    HDU 3849 By Recognizing These Guys, We Find Social Networks Useful pid=3849" target="_blan ...

  8. Juice Junctions

    Juice Junctions 题目描述 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都是11升每秒.管道可能连接节点,每个节点最多可以连接3 ...

  9. poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10141   Accepted: 503 ...

随机推荐

  1. SQL case when 遇到null值

    case  when f.FPH is  NULL then a.HSJE else f.KPHSJE  end    yes case f.FPH  when   NULL then a.HSJE ...

  2. 关于Windows下的访问控制模型

    在探索Windows操作系统的过程中,发现很多有意思 的东西. Windows下的访问控制模型也是我在Github上浏览代码时,无意中发现的. 项目地址 https://github.com/Krut ...

  3. C#ModBus Tcp的学习及Master的实现

    Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. 所以这也是我们工控领域软件开发的所必懂的通讯协议,我也是初次学习,先贴上我的学习笔记 一 ...

  4. 关于使用sublime的一些报错异常退出的解决方法

    1.我用Sublime Text 3,装了一些插件,现在一打开软件就提示plugin_host has exited unexpectedly,如下图 解决方案 :

  5. 多个div并排不换行

    1.所有div的父元素不换行   white-space: nowrap; 2.所有div设置为行内元素  display: inline-block; 基于java记账管理系统[尚学堂·百战程序员]

  6. 大专生自学web前端到找到工作的经验

    先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...

  7. nodejs库express是如何接收inbound json请求的

    这样几行简单的代码创建一个web服务器: var express = require('express'); var app = express(); var server = require('ht ...

  8. java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

    集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList     list 接口             | - ArrayList             | - Linked ...

  9. Android NDK 同时编译多个模块

    |-test |---Android.mk |---Application.mk |---sub1 |------Android.mk |------main.c |---sub2 |------An ...

  10. Python统计字符出现次数(Counter包)以及txt文件写入

    # -*- coding: utf-8 -*- #spyder (python 3.7) 1. 统计字符(可以在jieba分词之后使用) from collections import Counter ...