本题的大意就是加最少的边使得图成为边双。

多举例子,画图分析可得:最终答案就是叶子节点(度数为1的点)的个数加1在除以2。

那么我们的目的就转化为找叶子节点:

首先通过tarjan找到割边,再dfs将原图分为几个边双(通过割边划分),缩点,最后统计度数为1的节点个数即可。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=100100;
4 int n,m,ans,tot=1,cnt,sum;
5 int dfn[N],low[N];
6 int head[N],to[N],nxt[N];
7 int num[N],du[N],way[N];//way[]用来统计割边
8
9 void add(int u,int v){//tot从2开始,方便通过异或找反向边
10 nxt[++tot]=head[u];
11 head[u]=tot;
12 to[tot]=v;
13 }
14
15 void tarjan(int u,int fa){//fa是u的父亲边,该函数目的是为了找割边,不需要栈
16 low[u]=dfn[u]=++cnt;
17 for(int i=head[u];i;i=nxt[i]){
18 int v=to[i];
19 if(!dfn[v]){
20 tarjan(v,i);
21 low[u]=min(low[u],low[v]);
22 if(low[v]>dfn[u]) way[i]=way[i^1]=1;//i及其反向边是割边
23 }
24 else if(fa!=(i^1)) low[u]=min(low[u],dfn[v]);
25 }
26 }
27
28 void dfs(int u){
29 num[u]=sum;
30 for(int i=head[u];i;i=nxt[i]){
31 if(way[i]||num[to[i]]) continue;//u是割边或者对面点已经属于另外的连通块
32 dfs(to[i]);
33 }
34 }
35
36 int main(){
37 scanf("%d%d",&n,&m);
38 while(m--){
39 int x,y;
40 scanf("%d%d",&x,&y);
41 add(x,y);add(y,x);
42 }
43 tarjan(1,0);//0是1的父亲边
44 for(int i=1;i<=n;i++)
45 if(!num[i]) {sum++;dfs(i);}//sum统计连通块的个数
46 for(int i=1;i<=n;i++)
47 for(int j=head[i];j;j=nxt[j])
48 if(num[i]!=num[to[j]]) du[num[to[j]]]++;
49 for(int i=1;i<=sum;i++)
50 if(du[i]==1) ans++; //求度数为1的叶子节点
51 cout<<(ans+1)/2<<endl;
52 return 0;
53 }

最新文章

  1. Devexpress EXCEL导出
  2. React的虚拟DOM
  3. 更改(修改)mysql自动增序列改变从1000开始
  4. ACCESS自动编号重新从1开始
  5. stm32启动文件 startup_stm32f10x_hd.s
  6. OC基础(23)
  7. javascript代码复用模式(二)
  8. asp.net中的App_GlobalResources和App_LocalResources使用
  9. Layer中自定义属性的动画
  10. (一)stm32f103~~GPIO基本操作一(led灯)
  11. .NET Core玩转机器学习
  12. 基于zigbee协议的空中下载技术(OTA)
  13. 那些年,很多人没看懂的Python内置函数
  14. xLearn
  15. 开源的api文档管理系统
  16. HTML文本结构及常用标签
  17. spring源码:学习线索
  18. 批量压缩 css js 文件 包含多个文件 自动识别
  19. 第36-37 Tomcat & SVN
  20. Theano3.6-练习之消噪自动编码器

热门文章

  1. 从零开始在centos搭建博客(一)
  2. redux和dva
  3. 自动挂载mount
  4. mybatis 01: 静态代理 + jdk动态代理
  5. Vue+Koa+MongoDB从零打造一个任务管理系统
  6. Spring源码-xml解析
  7. 【lwip】04-网络数据包流向
  8. Java 解析Tiff深入研究
  9. React报错之Parameter &#39;event&#39; implicitly has an &#39;any&#39; type
  10. 第三十六篇:vue3响应式(关于Proxy代理对象,Reflect反射对象)