HDU 4587 割点
来源:互联网 发布:生肖 知乎 编辑:程序博客网 时间:2024/05/22 05:02
点击打开链接
题意:给一个无向图,可能是不连通的,问删除两个点之后联通块最多的数量,两个点随意
思路:之前写过一个删除一个点的剩余联通块的题目,和这个差不多嘛,但是要注意细节,WA了10多次,对于一个5000个点和5000条边的图来说,我们可以先去枚举删除一个点,然后剩下的操作就和删除一个点的相同了我们找到最大的cnt,cnt记录的是这个点删除后的联通块个数-1;具体细节看代码把,注意这种情况,一组数据
3 3
0 1
0 2
0 3
输出2,我之前写的一直输出3,处理了一下才过掉
#include <vector>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=5010;vector<int>G[maxn];int E[maxn],L[maxn],vis[maxn],cnt[maxn];int k,kk;void dfs(int x,int fa,int xx){ k++;E[x]=k;L[x]=k;vis[x]=1; for(unsigned int i=0;i<G[x].size();i++){ int t=G[x][i]; if(t==fa) continue; if(!vis[t]){ dfs(t,fa,xx); L[x]=min(L[x],L[t]); if(L[t]>=E[x]&&x!=xx) cnt[x]++; else if(x==xx) kk++; }else L[x]=min(L[x],E[t]); }}int slove(int n){ int ans=0; for(int i=1;i<=n;i++){ int sum=0,max1=-inf; memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); for(int j=1;j<=n;j++){ if(!vis[j]&&i!=j){ sum++;k=0;kk=0; dfs(j,i,j); if(kk>=2) cnt[j]=kk-1; else cnt[j]=-1; } } for(int j=1;j<=n;j++){ if(i!=j){ if(cnt[j]>max1) max1=cnt[j]; } } ans=max(ans,sum+max1); } return ans;}int main(){ int n,a,b,m; while(scanf("%d%d",&n,&m)!=EOF){ for(int i=0;i<maxn;i++) G[i].clear(); for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); a++;b++; G[a].push_back(b); G[b].push_back(a); } int ans=slove(n); printf("%d\n",ans); } return 0;}
1 0
- HDU 4587 割点
- HDU 4587 (割点)
- HDU 4587 割点
- hdu 4587(割点的应用)
- Hdu 4587 TWO NODES(割点)
- 【割点】 HDU 4587 TWO NODES
- hdu 4587 TWO NODES (枚举+割点,5级)
- HDU 4587TWO NODES(割点,连通块,枚举)
- HDU 4587TWO NODES(割点,连通块,枚举)
- HDU-4587 TWO NODES (割点[Tarjan])
- [HDU 4587] TWO NODES (Tarjan+割点)
- HDU 4587 TWO NODES 无向图的割点
- hdu 4587 TWO NODES (割点的应用)
- HDU 4587 TWO NODES(割点 模板题)
- hdu 4587 判断孤立点+割点+ 删除点之后,剩下多少连通分量
- HDU-4587 TWO NODES(割点变形或者求点双连通分量)
- HDU 3491 Thieves 拆点 最小割
- hdu 3491(最小割+拆点)
- Git push到多个远程库
- spring定时器配置
- Git查看、删除、重命名远程分支和tag
- 我要永远地记住你!(iOS中几种数据持久化方案)
- JAVA中修改JOptionPane的字体样式(Font)
- HDU 4587 割点
- Mysql 创建查询视图
- java的System.getProperty()方法可以获取的值
- 正则表达式验证
- 更换ADFS3.0的SSL 证书
- POJ 3067.Japan【树状数组】【5月11】
- 开发Android硬件驱动程序-开发android硬件抽象层模块
- 一致性hash算法(consistenthashing)
- Java面向对象之继承和重写