hdu4612:http://acm.hdu.edu.cn/showproblem.php?pid=4612

题意:给你一个无向连通图,问加上一条边后得到的图的最少的割边数;

题解:首先对原图求割边数,然后缩点之后建树,然后求树的直径。因为加上一条边,能消耗最大的割边就是树的直径。一道很好的模板题目。

 #pragma comment(linker,"/STACK:100000000,100000000")//阔栈的语句
#include <stdio.h>
#include <string.h>
#include <vector>
#define pb push_back
using namespace std;
const int maxn = ;
const int maxm = ;
struct EDGE{
int next, to, vis;
}edge[maxm*];//记录边,vis表示这一条边是否被访问
struct GEEDGE {
int u, to;
}geedge[maxm];//记录割边
int n,m,time,top,type,getot,cnt;//time是时间戳,type标记连通块,getot割边的数量,cnt边数
int head[maxn],st[maxn],dfn[maxn],low[maxn],belo[maxn];//belo[i],表示i属于哪个连通块
int start,ans1,ans,u,v;
void init(){
time=top=type=getot=cnt=;
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(belo,,sizeof(belo));
}
void add(int u,int v){
edge[cnt].to=v;
edge[cnt].next=head[u];
edge[cnt].vis=;
head[u]=cnt++;
}
void dfs(int u) {
low[u] = dfn[u] = ++time;
st[++top] = u;
for(int i = head[u];i != -;i = edge[i].next) {
if(edge[i].vis) continue;
edge[i].vis = edge[i^].vis = ;
int to = edge[i].to;
if(!dfn[to]) {
dfs(to);
low[u] = min(low[u], low[to]);
if(low[to] > dfn[u]) {//表示找到一个连通块
type++;
int v;
do {
v = st[top--];
belo[v] = type;//表示v属于第type个连通块
} while(v != to);
geedge[++getot].u = u;//记录割边的起点
geedge[getot].to = to;//记录割边的另一个点
}
}
else
low[u] = min(low[u], low[to]);
}
}
void DFS(int len,int fa,int now){//求树的直径
if(len>ans){
ans=len;
start=now;
}
for(int i=head[now];i!=-;i=edge[i].next){
int v=edge[i].to;
if(v!=fa) DFS(len+,now,v);
}
}
int main(){
while(~scanf("%d%d",&n,&m)&&n){
init();
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
for(int i=;i<=n;i++)
if(!dfn[i])
dfs(i);
ans1=getot;
memset(head,-,sizeof(head));cnt=;//刷新边,接下来从新加边
for(int i=;i<=ans1;i++){
add(belo[geedge[i].to],belo[geedge[i].u]);
add(belo[geedge[i].u],belo[geedge[i].to]);
}
ans = ;
DFS(,-,);//
ans=;
DFS(,-,start);//两遍DFS求树的直径
printf("%d\n", getot-ans);
}
}

Warm up的更多相关文章

  1. f4: Facebook’s Warm BLOB Storage System——Erasure Code

    Facebook在OSDI 2014上发表论文f4: Facebook's Warm BLOB Storage System,这个系统主要目的就是降低存储成本,在容忍磁盘,主机,机架,数据中心的同时提 ...

  2. hdu 4612 Warm up 双连通+树形dp思想

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total S ...

  3. HDU 4612 Warm up tarjan缩环+求最长链

    Warm up Problem Description   N planets are connected by M bidirectional channels that allow instant ...

  4. HDU 4612 Warm up(2013多校2 1002 双连通分量)

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Su ...

  5. HDU 4619 Warm up 2(2013多校2 1009 二分匹配)

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total S ...

  6. hdu 4619 Warm up 2(并查集)

    借用题解上的话,就是乱搞题.. 题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了.对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up, ...

  7. hdoj 4612 Warm up【双连通分量求桥&&缩点建新图求树的直径】

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Su ...

  8. 2013多校联合2 I Warm up 2(hdu 4619)

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  9. HDU 多校联合练习赛2 Warm up 2 二分图匹配

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  10. 多校联赛2 Problem2 Warm up 求桥的数目+缩点后的树的直径 当时被不知道原因的爆栈爆到无语了。。

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total S ...

随机推荐

  1. linux内存管理系列 +CFS 图解

    http://blog.chinaunix.net/uid-20543183-id-1930786.html http://blog.csdn.net/ustc_dylan/article/categ ...

  2. grep参数说明及常用用法

    grep参数说明及常用用法 趁着午休的时间把自己经常使用的一些grep命令整理一下. 方便以后查看. 后续会逐步把awk/sed/find等常用的命令理一理. 增强下记忆. 也算是对得起自己了. ^^ ...

  3. PHP中的cookie创建取回删除;

    <?php $expire=time()+3600;//设置过期cookie时间 setcookie('yaoyuan',"webyaoyuan",$expire);//se ...

  4. python下操作ftp上传

    生产情况:tomcat下业务log备份,目录分多级,然后对应目录格式放到ftp上:所以,结构上 我就是一级一级目录进行判断(因为我没有找到在ftp一次判断其子目录是否存在),还有一个low点就是我没有 ...

  5. thinkphp 常见问题

    0.写在最前面的不断更新 (1)trace不起作用 A:必须要输出到模板,才会有trace信息 (2)提示“您浏览的页面暂时发生了错误!请稍后再试-” A:检查控制器(看看能进到控制器没有,设断点输出 ...

  6. Bootstrap--全局CSS样式之概览

    (1)HTML5文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型.在项目中的每个页面都要参照下面的格式进行设置. Code<!DO ...

  7. Java SE (1)之 JFrame 组件 BorderLayout 布局

    JAVA 初期,练习SE ,桌面程序, package com.sunzhiyan; import java.awt.*; import java.awt.event.*; import javax. ...

  8. JQuery Datatables(二)

    前篇讲到了Datatables的基本用法,链接地址:http://www.cnblogs.com/wumian1360/p/4263129.html 今天来实现5,6,7三点. 其实Datatable ...

  9. 导出csv文件

    protected void Button1_Click(object sender, EventArgs e)     {         DataTable dt = new DataTable( ...

  10. DataGridView 绑定 List

    DataGridView 绑定 List<T> 不会自动更新 正确方式是将  List<T> 设置为 BindingList<T> 即可 (双向绑定)