hdu 4612 (双联通+树形DP)
加一条边后最少还有多少个桥,先Tarjan双联通缩点,
然后建树,求出树的直径,在直径起点终点加一条边去的桥最多,
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<stack>
#define N 200001
using namespace std;
int belong[N],head[N],num,ins[N],n,dfs[N],low[N],idx,ans,num1;
struct edge
{
int st,ed,next;
}E[N*10],e[N*10];
void addedge(int x,int y)
{
E[num].st=x;
E[num].ed=y;
E[num].next=head[x];
head[x]=num++;
}
void Addedge(int x,int y)
{
e[num1].st=x;
e[num1].ed=y;
e[num1].next=head[x];
head[x]=num1++;
}
stack<int>Q;
void Tarjan(int u,int father)
{
int i,j,v,flag=0;
low[u]=dfs[u]=idx++;
Q.push(u);
for(i=head[u];i!=-1;i=E[i].next)
{
j=E[i].ed;
if(dfs[j]==-1)
{
Tarjan(j,u);
low[u]=low[u]>low[j]?low[j]:low[u];
}
else if(j==father)
{
if(flag)
low[u]=low[u]>dfs[j]?dfs[j]:low[u];
flag++; }
else low[u]=low[u]>dfs[j]?dfs[j]:low[u]; }
if(dfs[u]==low[u])
{
do
{
v=Q.top();
Q.pop();
belong[v]=ans;
}while(v!=u);
ans++;
}
}
void read()
{
memset(head,-1,sizeof(head));
num1=0;
for(int i=0;i<num;i+=2)
{
int x=belong[E[i].st];
int y=belong[E[i].ed];
if(x==y)continue;
Addedge(x,y);
Addedge(y,x);
}
}
int dis;
int dist(int u)
{
ins[u]=1;
int max=0,mmax=0;
for(int i=head[u];i!=-1;i=e[i].next)
{
int v=e[i].ed;
if(ins[v]==1)continue;
int temp=dist(v);
if(temp>mmax)
{
max=mmax;
mmax=temp;
}
else if(temp>max)
{
max=temp;
}
}
if(dis<(mmax+max+1))
dis=mmax+max+1;
return mmax+1;
}
int main()
{
int i,m,x,y;
while(scanf("%d%d",&n,&m),n||m)
{
memset(head,-1,sizeof(head));
num=0;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
addedge(x,y);
addedge(y,x);
}
memset(dfs,-1,sizeof(dfs));
memset(low,-1,sizeof(low));
memset(ins,0,sizeof(ins));
idx=ans=0;
Tarjan(1,-1);
read();
memset(ins,0,sizeof(ins));
dis=0;
dist(1);
printf("%d\n",ans-dis);
}
return 0;
}
hdu 4612 (双联通+树形DP)的更多相关文章
- hdu 4612 双联通缩点+树形dp
#pragma comment(linker,"/STACK:102400000,102400000")//总是爆栈加上这个就么么哒了 #include<stdio.h> ...
- hdu 2242双联通分量+树形dp
/*先求出双联通缩点,然后进行树形dp*/ #include<stdio.h> #include<string.h> #include<math.h> #defin ...
- hdu 4612 Warm up 双连通+树形dp思想
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...
- HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价
Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/ ...
- HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)
<题目链接> 题目大意: 给定一个连通图,每个点有点权,现在需要删除一条边,使得整张图分成两个连通块,问你删除这条边后,两联通块点权值和差值最小是多少. 解题分析: 删除一条边,使原连通图 ...
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- hdu 5452 Minimum Cut 树形dp
Minimum Cut Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...
- HDU 1520 Anniversary party [树形DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...
- hdu 1520Anniversary party(简单树形dp)
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- mybatis传入map参数parameterType
基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的Ke ...
- spring的组成
① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能 SpringContext:ApplicationContext,扩展核心容器,提供 ...
- 解读Q_GLOBAL_STATIC(QFontDatabasePrivate, privateDb)
根据 src/corelib/global.h template <typename T>class QGlobalStatic{public: T *pointer; inline QG ...
- photoshop:模仿-广告放射背景
模仿对象:图片大小960*400 过程: 1.新建文档,大小为:960*800 2.选择渐变工具,黑白从上往下渐变 3.滤镜->扭曲->波浪,参考设置 4.滤镜->扭曲->极坐 ...
- P112、面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.链表结点定义如下:struct ListNode{ int m_nKey; ListNode* ...
- linux下关于程序性能和系统性能的工具、方法
观察性能/状态的方法:top free netstat /pro/目录下的信息 其中/pro/meminfo下的信息相当丰富 ------------------------------------- ...
- 图模型的统计推断 inference in graphical models(马尔科夫链的推断)
有关因子图(factor graphs)以及其在sum product 算法,max-algorithm中的应用,将在一下篇博客中分享. 谢谢您的关注,欢迎提出意见问题.
- 【开源推荐】AllJoyn:打造全球物联网的通用开源框架
摘要:随着智能设备的发展,物联网逐渐进入了人们的生活.据预测,未来几乎一切东西(超过500亿台设备)都可以互联.高通公司发布了开源项目AllJoyn,这是一个能够使连接设备间进行互操作的通用软件框架和 ...
- 第二部分 MediaPlayer的接口与架构
第二部分 MediaPlayer的接口与架构 2.1 整体框架图 MediaPlayer的各个库之间的结构比较复杂,可以用下图的表示 在各个库中,libmedia.so位于核心 ...
- Java [leetcode 35]Search Insert Position
题目描述: Given a sorted array and a target value, return the index if the target is found. If not, retu ...