http://poj.org/problem?id=2117

Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 5459   Accepted: 1788

当m==0 时,特判输出 n-1~~~

先求出原始的连通分量,

然后只有删割点才会增加连通分量,枚举每个割点

最后加上原始的

 #include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; const int N();
int n,m,u,v;
int sumedge,head[N<<];
struct Edge
{
int to,next;
Edge(int to=,int next=) :
to(to),next(next) {}
}edge[N*]; void ins(int from,int to)
{
edge[++sumedge]=Edge(to,head[from]);
head[from]=sumedge;
} int low[N<<],dfn[N<<],tim;
int sumcol,num[N];
int cutpoint[N]; void DFS(int now,int pre)
{
low[now]=dfn[now]=++tim;
int sumtredge=,if_cutpoint=;
for(int i=head[now];i!=-;i=edge[i].next)
{
int go=edge[i].to;
if((i^)!=pre)
{
if(!dfn[go])
{
sumtredge++;
DFS(go,i);
if(low[go]>=dfn[now])
{
if_cutpoint=;
num[now]++;
} low[now]=min(low[now],low[go]);
}
else low[now]=min(low[now],dfn[go]);
}
}
if(pre==-)
{
if(sumtredge>) cutpoint[now]=;
}
else if(if_cutpoint) cutpoint[now]=;
} int ans,cnt,tmp,vis[N],root[N],cut[N]; void link(int x)
{
vis[x]=;
for(int i=head[x];i!=-;i=edge[i].next)
{
v=edge[i].to;
if(!vis[v]) link(v);
}
} void cut_point(int pre,int fa)
{
vis[pre]=;
for(int i=head[pre];i!=-;i=edge[i].next)
{
int go=edge[i].to;
if(!vis[go])
{
if(pre==fa) cnt++;
cut_point(go,fa);
}
}
} void init(int n)
{
sumedge=-; ans=tim=tmp=cnt=;
memset(vis,,sizeof(vis));
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(num,,sizeof(num));
memset(cut,,sizeof(cut));
memset(root,,sizeof(root));
memset(head,-,sizeof(head));
memset(cutpoint,,sizeof(cutpoint));
} int main()
{
// freopen("makerout.txt","r",stdin);
// freopen("myout.txt","w",stdout); while(~scanf("%d%d",&n,&m)&&n)
{
init(n);
if(m==) printf("%d\n",n-);
else
{
for(;m;m--)
{
scanf("%d%d",&u,&v);
ins(u,v); ins(v,u);
}
for(int i=;i<n;i++)
if(!vis[i]) ++tmp,link(i);
for(int i=;i<n;i++)
if(!dfn[i]) DFS(i,-);
for(int i=;i<n;i++)
if(cutpoint[i])
{
memset(vis,,sizeof(vis));
cut_point(i,i);
ans=max(ans,cnt-);
cnt=;
}
ans+=tmp;
printf("%d\n",ans);
}
}
return ;
}

最新文章

  1. css -- 布局元素
  2. 转载—“Cache-control”常见的取值有private、no-cache、max-age、must-revalidate等
  3. Advice on improving your programming skills
  4. svo的一些博客解析
  5. QT:轻松获取网页源码
  6. [SOJ]&#160;Babelfish
  7. [Centos] mod_wsgi 安装流程以及遇到问题解决办法。apxs: command not found 或 Sorry, Python developer package does not appear to be installed.
  8. Promise 对象
  9. C# Redis实战(七)
  10. Android初级教程小案例之单选框RadioGroup与复选框CheckBox
  11. 【PMP】关键路径法与关键链法
  12. HTML 页面的 批量删除的按钮
  13. 【JAVA】抽象类,抽象方法
  14. BZOJ 3174 拯救小矮人(贪心+DP)
  15. seajs 笔记
  16. openvswitch 源码分析 OVS_ACTION_ATTR_HASH action
  17. jquery 中选择当前标签下众多相同子标签中的第n个
  18. ios 重用UI部分代码的好方法(再也不用为局部变量的命名而烦恼啦!)
  19. CoreData数据库升级
  20. C++ 类的隐式转换

热门文章

  1. CSS布局总结(一)
  2. Hive中的一种假NULL
  3. Django -查询数据库相关操作
  4. Selenium:简单的尝试一下
  5. RabbitMQ学习总结(6)——消息的路由分发机制详解
  6. [TypeScript] Generic Functions, class, Type Inference and Generics
  7. ACdream 1127(Base Station-树状数组-2个约束条件)
  8. MAVEN创建并打包web项目
  9. 好莱坞原则—Spring的IOC容器
  10. Linux下处理JSON的命令行工具:jq---安装