hdu4612 卡cin e-DCC缩点
/*
给定无向图,求加入一条边后最少剩下多少桥
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define maxm 1000005
struct Edge{int to,nxt,cut;}edge[maxm<<],edge_c[maxm<<];
int head[maxn],tot,head_c[maxn],tot_c,n,m,q; void addedge(int u,int v){
edge[tot].to=v;edge[tot].nxt=head[u];head[u]=tot++;
edge[tot].cut=;
}
void add_c(int u,int v){
edge_c[tot_c].to=v;
edge_c[tot_c].nxt=head_c[u];
head_c[u]=tot_c++;
} int dfn[maxn],low[maxn],ind,c[maxn],dcc;
void tarjan(int u,int in_edge){
dfn[u]=low[u]=++ind;
for(int i=head[u];i!=-;i=edge[i].nxt){
int v=edge[i].to;
if(!dfn[v]){
tarjan(v,i);
low[u]=min(low[u],low[v]); if(dfn[u]<low[v])
edge[i].cut=edge[i^].cut=;
}
else if(i!=(in_edge^))
low[u]=min(low[u],dfn[v]);
}
}
void dfs1(int u){
c[u]=dcc;
for(int i=head[u];i!=-;i=edge[i].nxt){
int v=edge[i].to;
if(c[v]||edge[i].cut)continue;
dfs1(v);
}
} int dep[maxn],fa[maxn],flag[maxn];//flag[u]表示u上点的边使割边
void dfs2(int u,int pre,int deep){
dep[u]=deep;fa[u]=pre;flag[u]=;
for(int i=head_c[u];i!=-;i=edge_c[i].nxt){
int v=edge_c[i].to;
if(v==pre)continue;
dfs2(v,u,deep+);
}
} void init(){
memset(head,-,sizeof head);
memset(head_c,-,sizeof head_c);
memset(dep,,sizeof dep);
memset(fa,,sizeof fa);
memset(flag,,sizeof flag);
memset(c,,sizeof c);
memset(dfn,,sizeof dfn);
memset(low,,sizeof low);
tot=tot_c=ind=dcc=;
}
int main(){
int tt=;
while(cin>>n>>m,n){
init();
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
tarjan(,); dcc=;//染色
for(int i=;i<=n;i++)
if(!c[i]){
++dcc;
dfs1(i);
} for(int i=;i<tot;i++){//缩点
int v=edge[i].to,u=edge[i^].to;
if(c[u]==c[v])continue;
add_c(c[u],c[v]);
} int Max=-,root=;
dfs2(root,,);
for(int i=;i<=dcc;i++)
if(Max<dep[i]){
Max=dep[i];
root=i;
}
memset(dep,,sizeof dep);
dfs2(root,,);
for(int i=;i<=dcc;i++)
Max=max(Max,dep[i]); cout<<dcc--Max<<endl; }
return ;
}
hdu4612 卡cin e-DCC缩点的更多相关文章
- acdream B - 郭式树 (水题 卡cin,cout, 卡LL)
题目 输入正好是long long的最大, 但是答案超long long 所以用unsigned, 不能用cin cout否则一定超时: 不能用abs(), abs 只用于整数. unsigned ...
- HDU4612:Warm up(缩点+树的直径)
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Su ...
- 剖析信用卡 DCC 交易
摘要: 所谓DCC交易(Dynamic Currency Conversion,直译:动态货币转换 ),或者叫CPC交易(Cardholder Preferred Currency,直译:持卡人选定货 ...
- HDU-1827-Summer Holiday(强连通分量,贪心)
链接:https://vjudge.net/problem/HDU-1827 题意: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所 ...
- Mathematics:Find a multiple(POJ 2356)
找组合 题目大意:给你N个自然数,请你求出若干个数的组合的和为N的整数倍的数 经典鸽巢原理题目,鸽巢原理的意思是,有N个物品,放在N-1个集合中,则一定存在一个集合有2个元素或以上. 这一题是说有找出 ...
- 生成1~n的全排列
输入正整数n,输出n的全排列. 样例输入1: 3 样例输出1: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 分析: 按字典序从小到大的顺序输出所有的排列. (字典序:两个序 ...
- 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解
题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...
- [BZOJ1012] [JSOI2008] 最大数maxnumber (ST表)
Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...
- HNOI 2012 永无乡
codevs 1477 永无乡 http://codevs.cn/problem/1477/ 2012年湖南湖北省队选拔赛 时间限制: 1 s 空间限制: 128000 KB 题目描述 Des ...
随机推荐
- bind,unbind,one
刚开始我们先看一下它的定义: .bind( eventType [, eventData], handler(eventObject)) .Bind()方法的主要功能是在向它绑定的对象上面提供一些事件 ...
- 编写blog第一天
今天玩的比较嗨,离开学还剩半个月了,之前在网上搜集了一些blog制作方面的资料,并且在博客园注册了一个账号,今天才打开了申请已久的blog,现在已经对blog具有的基本功能和界面布局有了比较全面的掌握 ...
- Eclipse打印GC日志
一.生成gc.log 第一步:右键项目或文件——Run As——Run Configurations. 第二步:点击Arguments,在VM arguments中填写-Xloggc:F:/gc.lo ...
- 获取异步API数据
异步操作应该是以前学习 ajax 时才被明确提及,就目前的理解,同步就是同一时间只能做一件事,如果使用 ajax同步模式,则代码会卡在 xhr.send() 这里,只有请求响应的过程全部完成了才会执行 ...
- ffmpeg笔记
1.视频降低质量,减小体积: ffmpeg -i aaa.mp4 -strict -2 -qscale 20 -y outfile.mp4
- 深入理解JVM - 1 - Java内存区域划分
作者:梦工厂链接:https://www.jianshu.com/p/7ebbe102c1ae来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. Java与C++之间有一堵 ...
- eMMC基础技术1:MMC简介
[转]http://www.wowotech.net/basic_tech/mmc_sd_sdio_intro.html 1. 前言 熟悉Linux kernel的人都知道,kernel使用MMC s ...
- EF使用Fluent API配置映射关系
定义一个继承自EntityTypeConfiguration<>泛型类的类来定义domain中每个类的数据库配置,在这个自定义类的构造函数中使用我们上次提到的那些方法配置数据库的映射. 映 ...
- 零散的python知识点
python第三方包的存放位置 python找包的规则 __init__.py 文件 解决python3跨目录引用包: 异常类 help() 函数 字典的使用 可以对字典进行循环 字典key或者val ...
- selenium中,8种 find element 方法
-*- coding;utf-8 -*- from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www ...