传送门:HDU5452

题意:给出一个无向图G,求图G的最小边割集,并且使得割边中有且仅有一条属于图G的生成树T。

思路:考虑生成树中的每一条边i,将其去掉后生成树就被划分成两部分,则全图的割边就是那些跨越这两部分的边,将这些割边的数量记录为ans[i],但是求ans[]的过程显然不能暴力,考虑每条不在生成树中的边对答案的贡献,设其端点为u,v,则u -> v路径上所有边对应的ans[i]都应该++,但是这个过程也不能暴力,这时候就要用到imos和的思想了,详见:点击打开链接

也就是说我们只需要在ans[u]++, ans[v]++, ans[lca(u, v)] -= 2,然后最后再求一遍和就行了。

PS:我感觉这种做法是这个题的正解,看网上好多做法都是水过去的。

代码:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 20050
#define MAXM 200050
#define inf 0x3f3f3f3f
typedef pair<int,int>P;
int dep[MAXN], ans[MAXN];
int f[20][MAXN], pre[MAXN];
int cnt;
struct node
{int v, next;node(int _v = 0, int _next = 0) : v(_v), next(_next) {}
}mp[MAXM * 2];void init()
{cnt = 0;memset(pre, -1, sizeof(pre));memset(ans, 0, sizeof(ans));
}void add(int u, int v)
{mp[cnt] = node(v, pre[u]), pre[u] = cnt++;mp[cnt] = node(u, pre[v]), pre[v] = cnt++;
}void dfs(int u, int fa)
{dep[u] = dep[fa] + 1;for(int i = pre[u]; ~i; i = mp[i].next){int v = mp[i].v;if(v == fa) continue;dfs(v, u);f[0][v] = u;}
}int lca_init(int n)
{dep[1] = 1;dfs(1, 0);int k = 0,t = 1;while(t <= n)t <<= 1,k++;for(int i=0;i+1<k;i++){for(int j=1;j<=n;j++){f[i+1][j] = f[i][f[i][j]];}}return k;
}int lca(int u, int v, int MAX)
{if(dep[u] < dep[v]) swap(u, v);int k = dep[u] - dep[v];for(int i=0;i<MAX;i++){if((k >> i) & 1)u = f[i][u];}if(u == v)return u;for(int i=MAX-1;i>=0;i--)while(f[i][u] != f[i][v]){u = f[i][u];v = f[i][v];}return f[0][u];
}void get_ans(int u, int fa)
{for(int i = pre[u]; ~i; i = mp[i].next){int v = mp[i].v;if(v == fa) continue;get_ans(v, u);ans[u] += ans[v];}
}int main()
{int T, u, v, n, m, kase = 1;cin >> T;while(T--){scanf("%d %d", &n, &m);init();for(int i = 0; i < n - 1; i++){scanf("%d %d", &u, &v);add(u, v);}int up = lca_init(n), fa;for(int i = n - 1; i < m; i++){scanf("%d %d",&u, &v);fa = lca(u, v, up);ans[u]++, ans[v]++;ans[fa] -= 2;}get_ans(1, -1);printf("Case #%d: %d\n", kase++, *min_element(ans + 2, ans + n + 1) + 1);}
}

HDU - 5452 Minimum Cut LCA + imos和相关推荐

  1. HDU - 5452 Minimum Cut(LCA+树上差分)

    题目链接:点击查看 题目大意:给出n个点,n-1条边组成一棵树,然后再给出m-n-1条边,组成一个图,现在要让我们求最少删去几条边才能让整个图不连通,并且要求只能在树上删去最多一条边 题目分析:这个题 ...

  2. Hdu 5454,Minimum Cut,最近公共祖先+dfs遍历

    这道题补充了自己最近公共祖先的知识点: LCA(Lowest Common Ancestors)两种求法:①离线:tarjan+dfs:②在线算法,还没看 题意: 先给定一棵n个节点的树,然后给定一个 ...

  3. 【HDU - 5452】Minimum Cut(树形dp 或 最近公共祖先lca+树上差分,转化tricks,思维)

    题干: Given a simple unweighted graph GG (an undirected graph containing no loops nor multiple edges) ...

  4. HDU Problem - 6214 Smallest Minimum Cut(最小割边,两种方法)

    题目链接 Problem Description Consider a network G=(V,E)G=(V,E)G=(V,E) with source sss and sink t" r ...

  5. HDU 1385 Minimum Transport Cost

    HDU 1385 Minimum Transport Cost 我的WA代码 AC的代码 我的WA代码 我的大概思路就是,如果i->j,如果找到一个中间点k就直接简单的将path[i][j]=k ...

  6. POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)

    题目链接:点击查看 题目大意:给出一张无向图,要求将其分为两个集合,使得最小割最小 题目分析:算法学习自:https://blog.csdn.net/dingdi3021/article/detail ...

  7. 算法小白理解最大流最小割(Maximum flow Minimum cut)问题

    网上流传的关于最大流最小割问题的全都是索然无味 的一些讲课视频,当然如果你英语能力很强,直接看外国的视频也十分好理解,但于我这种理工科渣渣来说,看懂那种专业的讲课视频是不可能的,不存在的,所以把自己对 ...

  8. 图像分割经典算法--《最小割最大流》(Minimum Cut——Max Flow)

    1.算法介绍 最小割算法(Minimum Cut)是图像分割的经典算法之一,同时也在"Graph Cut"."Grab Cut"等算法中都有被使用过.最小割最大 ...

  9. HDU - 6214 Smallest Minimum Cut(最小割最少边数)

    题目链接:点击查看 题目大意:给出一张由n个点以及m条边组成的有向图,现在要求出最少割掉几条边使得整张图不连通并且割掉边的权值最小 题目分析:题目的意思也就是要求最小割的最少边数,这里有两个方法: 先 ...

最新文章

  1. 【android】java.lang.NoClassDefFoundError或classnotfount等异常错误
  2. 2021年夏季学期“清华大学大数据能力提升项目” 招募《大数据实践课》企业合作项目...
  3. 刷固件Layer1到手机FLASH(硬刷)
  4. TensorFlow | TensorFlow实践(一)
  5. android Android-PullToRefresh 下拉刷新
  6. List接口的常用方法以及ArrayList/LinkedList源码分析
  7. linux usb免驱麦克风,Android无驱usb音频实现
  8. 无限极分类php简单,创建无限极分类树型结构的简单方法
  9. mysql慢查询优化
  10. Spring Cloud Zuul网关集成JWT身份验证学习总结
  11. 威纶触摸屏在easybuilder中如何组态添加滑动开关元件?
  12. c语言命令笔记本电脑快捷键,实用的电脑操作技巧(附快捷键)
  13. 什么是高斯模糊算法?
  14. git aliases
  15. Linux系列——Linux操作指令之ip指令详细理解及常用命令
  16. 按键精灵9.5.1.11790秒速启动,多余元素全灭版
  17. LAMP兄弟连-招募PHP技术讲师
  18. pandas数据处理-----(一)
  19. Python:生成随机偏态分布
  20. 基于JSP通讯录管理系统

热门文章

  1. 【[BJOI2017]魔法咒语】
  2. 随鼓点跃动的身心:那些悠扬易推的耳机
  3. debian 下docker 网卡直通
  4. QuartusⅡ中的D触发器(dff)中,prn和clrn引脚的区别
  5. 常见电容器图片_【热门】进口EPCOS电容器原厂品质
  6. 关于kettle版本报错不是合法的kjb,ktr文件
  7. 利用位置特征或者历史数据,提取最相似一个或者多个句子
  8. html的毕业设计步骤和方法,毕业论文格式排版步骤全攻略
  9. 重视对新能源问题的研究,将从新能源电气火灾的角度做进一步分析
  10. 关于第一次写项目的总结