删边(cip)

给出一个没有重边和自环的无向图,现在要求删除其中两条边,使得图仍然保持连通。

你的任务是计算有多少组不合法的选边方案。注意方案是无序二元组。


Sol

神题,无从下手啊。

考虑点dfs建出dfs树,边分为两种--树边,非树边。

那么割断两条非树边显然不行。

考虑割一条树边a和一条非树边b,当b为a子树内唯一返祖边或a子树无返祖边时不行。

考虑两条树边ab,我们把一条返祖边打在它覆盖的所有树边上,如果这两条非树边被覆盖的集合相同,那么他们中间的那一段就会断开,就可以。

于是可以把每条返祖边给个hash值,开始处加,结束处减,统计每条边的覆盖集合,在排序统计下就行。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 300005
#define rand() ((rand()<<15)|rand())
#define ll unsigned long long
using namespace std;
int n,m,head[maxn],tot,flag[maxn],t;
int sum[maxn],sz[maxn],a[maxn],deep[maxn];
struct node{
int v,nex;int h;
}e[maxn*];
ll ans,ha[maxn];
void add(int t1,int t2){
e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k,int fa){
flag[k]=; deep[k]=deep[fa]+;
for(int i=head[k];i;i=e[i].nex){
if(flag[e[i].v]){
if(e[i].v!=fa&&deep[e[i].v]<deep[k]){
ha[e[i].v]-=e[i].h;
ha[k]+=e[i].h;
sz[k]++;sz[e[i].v]--;
}
continue;
}
dfs(e[i].v,k);
}
}
void tj(int k){
flag[k]=;
for(int i=head[k];i;i=e[i].nex){
if(flag[e[i].v])continue;
tj(e[i].v);
sz[k]+=sz[e[i].v];
ha[k]+=ha[e[i].v];
}
if(k!=){
if(!sz[k])ans+=m-,t++;
if(sz[k]==)ans++;
}
}
int main(){
srand();
cin>>n>>m;
for(int i=,t1,t2;i<=m;i++){
scanf("%d%d",&t1,&t2);
add(t1,t2);add(t2,t1);
e[tot].h=e[tot-].h=rand()*rand();
}
dfs(,);
memset(flag,,sizeof flag);tj();
sort(ha+,ha+n+);
for(int i=;i<=n;i++){
int j=i;
for(;ha[j+]==ha[i];j++);
if(ha[j]==)continue;
int len=j-i+;
ans=ans+1LL*len*(len-)/;
i=j;
}
ans=ans-1LL*t*(t-)/;
cout<<ans<<endl;
return ;
}

最新文章

  1. js中的块作用域
  2. radio值未出现JQ获取值问题
  3. python实现一个图灵机器人
  4. 数据结构--树(遍历,红黑,B树)
  5. mouseover 移入某个元素后停留一段时间再执行函授,我用于解决轮播图下面计数用的元素快速移入后会出BUG的问题。
  6. mysql数据库中查询汉字的拼音首字母
  7. [转]SQL快速入门
  8. C预处理,条件编译
  9. mongodb 排序 Unable to determine the serialization information for the expression 异常
  10. jQuery 中的事件绑定与取消绑定
  11. html标签默认样式整理
  12. 大麦盒子(domybox)无法进入系统解决方案!【简单几步】
  13. python_如何让类支持比较运算?
  14. (原)lua及torch中的type
  15. eclipse 生成webservice 客户端
  16. vmware中ubuntu虚拟机扩容
  17. LVS,HAPROXY,NGINX各自的优缺点
  18. 分页和Cookie、Session
  19. mix-blend-mode 混合模式 background-blend-mode 背景混合模式 isolation:isolate 隔离
  20. 安装和使用jupyter

热门文章

  1. 敏捷开发学习笔记-Agile development(AM)
  2. MySQL☞lower函数
  3. 【JSON类】使用说明
  4. 拓扑排序 (Ordering Tasks UVA - 10305)
  5. spring 整合hibernate注解时候,出现“Unknown entity: com.ssh.entry.Admin; nested exception is org.hibernate.MappingException: Unknown entity: com.ssh.entry.Admin”异常的问题
  6. 基于freeRTOS定时器实现闹钟(定时)任务
  7. 1.安装hbase
  8. java—连连看-实现封装
  9. GPS定位,根据经纬度查询附近地点的经纬度-sql方法实现
  10. C跟C++