边双联通分量缩点+树的直径——cf1000E
题意理解了就很好做
题意:给一张无向图,任意取两个点s,t,s->t的路径上必经边数量为k
求这样的s,t,使得k最大
#include<bits/stdc++.h>
#define maxn 300005
using namespace std;
struct Edge{int to,nxt,b;}e[maxn<<],e_c[maxn<<];
int head[maxn],tot,head_c[maxn],tot_c,n,m;
void init(){
memset(head,-,sizeof head);
memset(head_c,-,sizeof head_c);
tot=tot_c=;
}
void add(int u,int v){
e[tot].to=v;e[tot].nxt=head[u];head[u]=tot++;
}
void add_c(int u,int v){
e_c[tot_c].to=v;e_c[tot_c].nxt=head_c[u];head_c[u]=tot_c++;
} int ind,low[maxn],dfn[maxn];
void tarjan(int x,int in_edge){
low[x]=dfn[x]=++ind;
for(int i=head[x];i!=-;i=e[i].nxt){
int y=e[i].to;
if(!dfn[y]){
tarjan(y,i);
low[x]=min(low[x],low[y]);
if(low[y]>dfn[x])
e[i].b=e[i^].b=;
}
else if(i!=(in_edge^))
low[x]=min(low[x],dfn[y]);
}
}
int c[maxn],dcc;
void dfs1(int x){
c[x]=dcc;
for(int i=head[x];i!=-;i=e[i].nxt){
int y=e[i].to;
if(e[i].b || c[y]!=)continue;
dfs1(y);
}
} int dp[maxn],ans;
void dfs2(int x,int pre){
for(int i=head_c[x];i!=-;i=e_c[i].nxt){
int y=e_c[i].to;
if(y==pre)continue;
dfs2(y,x);
ans=max(ans,dp[x]+dp[y]+);
dp[x]=max(dp[x],dp[y]+);
}
} int main(){
init();
cin>>n>>m;int u,v;
for(int i=;i<=m;i++){
cin>>u>>v;
add(u,v);add(v,u);
}
tarjan(,-); for(int i=;i<=n;i++)
if(!c[i]){
++dcc;
dfs1(i);
} for(int i=;i<tot;i++){
int x=e[i].to,y=e[i^].to;
if(c[x]!=c[y])
add_c(c[x],c[y]);
} dfs2(,); cout<<ans<<'\n';
}
边双联通分量缩点+树的直径——cf1000E的更多相关文章
- HDU5409---CRB and Graph 2015多校 双联通分量缩点
题意:一个联通的无向图, 对于每一条边, 若删除该边后存在两点不可达,则输出这两个点, 如果存在多个则输出第一个点尽可能大,第二个点尽可能小的. 不存在输出0 0 首先 若删除某一条边后存在多个联通分 ...
- POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集
题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...
- POJ3177 Redundant Paths —— 边双联通分量 + 缩点
题目链接:http://poj.org/problem?id=3177 Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)
[题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- Spoj 2878 KNIGHTS - Knights of the Round Table | 双联通分量 二分图判定
题目链接 考虑建立原图的补图,即如果两个骑士不互相憎恨,就在他们之间连一条无向边. 显而易见的是,如果若干个骑士在同一个点数为奇数的环上时,他们就可以在一起开会.换句话说,如果一个骑士被一个奇环包含, ...
- 【UVA10972】RevolC FaeLoN (求边双联通分量)
题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...
- [J]computer network tarjan边双联通分量+树的直径
https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...
- BZOJ 压力 tarjan 点双联通分量+树上差分+圆方树
题意 如今,路由器和交换机构建起了互联网的骨架.处在互联网的骨干位置的核心路由器典型的要处理100Gbit/s的网络流量. 他们每天都生活在巨大的压力之下.小强建立了一个模型.这世界上有N个网络设备, ...
随机推荐
- springboot + zipkin(brave-okhttp实现)
一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipkin server: 2.1.在官网下载服务jar,http://zipkin.io/pages/quickstart.html ...
- Java—Map浅入
写支付签名的时候遇到了Map一家,就简单的比较了一下,于是乎先打印看看结果 Map<String,String> hashMap1 = new HashMap<>();hash ...
- Hadoop–TaskTracker 相关
TaskTracker 是Hadoop集群中运行于各个节点上的服务.他是JobTracker和Task之间的"通信桥梁".一方面它从JobTracker端接受并执行各种命令:比如运 ...
- C# 简单的统计指定几个字符组合的所有结果
比如 用 a,b,c,d 4个字符组成一个8个长度的字符串,问一共有多少可能,应该有4的8次方种,用代码简单实现 private string[] AAA() { string[] cs = { &q ...
- html标签注意事项
1,关于媒体的video标签 在同一个页面上如果有多个video标签,并且初始化都赋值,则video不会播放, 解决办法,用计时器每隔50ms给后面的video标签设置src,设置完为止 2,关于ch ...
- 伪类元素before&after
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Shell case in语句详解
和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句 ...
- ES6面试 知识点汇总(全)
近期在复习ES6,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总.(全干货,适合对ES6有一定理解的同学复习,以及ES6面试.) 一.问:ES6是什么? 答: ES6是新一代的JS语言标准 ...
- JavaScript ---- 闭包(什么是闭包,为什么使用闭包,闭包的作用)
经常被问到什么是闭包? 说实话闭包这个概念很难解释.JavaScript权威指南里有这么一段话:“JavaScript函数是将要执行的代码以及执行这些代码作用域构成的一个综合体.在计算机学术语里,这种 ...
- HTML——表格标签
存在即是合理的. 表格的现在还是较为常用的一种标签,但不是用来布局,常见处理.显示表格式数据. 创建表格 在HTML网页中,要想创建表格,就需要使用表格相关的标签.创建表格的基本语法格式如下: < ...