loj#2788-「CEOI2015 Day1」管道【树上差分】

正题

题目链接:https://loj.ac/p/2788


题目大意

给出nnn个点mmm条边的一张图,求它的所有割边。

1≤n≤105,1≤m≤6×1061\leq n\leq 10^5,1\leq m\leq 6\times 10^61n105,1m6×106内存限制16MB


解题思路

我们存不下所有的边,但是nnn很小。一个朴素的想法是我们搞出一棵生成树来,然后对于非树边(x,y)(x,y)(x,y)就相当于把xxxyyy路径上的边都标记成非割边,然后剩下的就是割边了。

但是我们不能离线建生成树,因为我们存不下所有的边,考虑一下别的方向的优化。我们会发现对于非树边来说,如果这一条非树边能被其他非树边完全覆盖,那么说明这条边就没有用,所以我们对于非树边来说也只需要保留一棵最小生成树即可。

然后至于标记方面用树上差分来处理就好了。

时间复杂度:O(m+nlog⁡n)O(m+n\log n)O(m+nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cctype>
using namespace std;
const int N=1e5+10;
int n,m,fa[N],Fa[N],c[N],dep[N],f[N][18];
vector<int> G[N];bool v[N];
vector<pair<int,int> >e;
int find(int x)
{return (fa[x]==x)?(x):(fa[x]=find(fa[x]));}
int Find(int x)
{return (Fa[x]==x)?(x):(Fa[x]=Find(Fa[x]));}
int read(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
void dfs(int x,int fa){dep[x]=dep[fa]+1;v[x]=1;for(int i=0;i<G[x].size();i++){int y=G[x][i];if(y==fa)continue;dfs(y,x);f[y][0]=x;}return;
}
void calc(int x,int fa){v[x]=1;for(int i=0;i<G[x].size();i++){int y=G[x][i];if(y==fa)continue;calc(y,x);c[x]+=c[y];}if(!c[x]&&fa)printf("%d %d\n",x,fa);return;
}
int LCA(int x,int y){if(dep[x]>dep[y])swap(x,y);for(int i=17;i>=0;i--)if(dep[f[y][i]]>=dep[x])y=f[y][i];if(x==y)return x;for(int i=17;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)fa[i]=Fa[i]=i;for(int i=1;i<=m;i++){int x=read(),y=read();if(find(x)!=find(y)){fa[find(x)]=find(y);G[x].push_back(y);G[y].push_back(x);}else if(Find(x)!=Find(y)){Fa[Find(x)]=Find(y);e.push_back(make_pair(x,y));}}for(int i=1;i<=n;i++)if(!v[i])dfs(i,0);memset(v,0,sizeof(v));for(int j=1;j<18;j++)for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];for(int i=0;i<e.size();i++){int x=e[i].first,y=e[i].second;c[x]++;c[y]++;c[LCA(x,y)]-=2;}for(int i=1;i<=n;i++)if(!v[i])calc(i,0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Acwing -- 单调队列优化的DP问题

文章目录引入acwing154 滑动窗口应用135 最大子序和1088.旅行问题AcWing 1087. 修剪草坪28AcWing 1089. 烽火传递AcWing 1090. 绿色通道AcWing 1091. 理想的正方形引入 acwing154 滑动窗口 题目链接 题解 应用 闫氏最优化问题分析法 135 最大子序和 题目&#xff1a; 输入…

模板:半平面交(计算几何)

所谓半平面交&#xff0c;就是和“半平先生”当面交谈。顾名思义&#xff0c;这是一个源于日本的算法。 &#xff08;逃&#xff09; 前言 感觉应用很灵活的一个算法&#xff0c;一切有两个变量的线性规划问题都可以转化为半平面交。 有时可能要注意取等问题&#xff08;指射…

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) A-F全题解

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) 文章目录A. Simply Strange SortB. Charmed by the GameC. Deep Down BelowD1/D2. Up the StripE. Bottom-Tier ReversalsF. Top-Notch InsertionsA. Simply Strange Sort 签到题&#xff0c;暴力做 …

[小技巧]C#中如何为枚举类型添加描述方法

背景在我们的日常开发中&#xff0c;我们会经常使用枚举类型。有时我们只需要显示枚举的值或者枚举值对应名称&#xff0c; 但是在某些场景下&#xff0c;我们可能需要将枚举值显示为不同的字符串。例&#xff1a; 当前我们有如下枚举Level这个枚举有4个可选值B, N, G, VG。 现…

Loj#3320-「CCO 2020」旅行商问题

正题 题目链接:https://loj.ac/p/3320 题目大意 有一张nnn个点的无向完全图&#xff0c;每一条边是红色或者蓝色&#xff0c;对于每个点sss求从这个点出发的一条尽量短的经过所有点的路径。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 显然地猜测一下最短的长度肯定是n…

AcWing 1087. 修剪草坪28

AcWing 1087. 修剪草坪 题意: 有n个数&#xff0c;不能选超过连续的k个数&#xff0c;问所能选的最大值是多少&#xff1f; 题解&#xff1a; 我们首先分析dp过程&#xff1a; dp[i]表示选择完前i个数的最大值 sum[i]表示前i项和 对于第i个数&#xff0c;它有两个情况&#…

洛谷P4463:calc(dp、拉格朗日插值)

Solution\text{Solution}Solution 神奇题目。 首先可以强制所有的数递增&#xff0c;最后的答案乘一个 n!n!n! 即可。 设 dpi,jdp_{i,j}dpi,j​ 表示在 [1,j][1,j][1,j] 的值域选了 iii 个数的答案&#xff0c;不难写出 dp 转移&#xff1a; dpi,jdpi−1,j−1jdpi,j−1dp_{i,j…

CF1710C-XOR Triangle【dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1710C 题目大意 求有多少对0≤a,b,c≤n0\leq a,b,c\leq n0≤a,b,c≤n满足axorb,axorc,bxorca\ xor\ b,a\ xor\ c,b\ xor\ ca xor b,a xor c,b xor c作为边长时能构成一个非退化三角形。 n以二进制形式给出 1≤n<221051…

工业通信的开源项目 HslCommunication 介绍

前言&#xff1a;本项目的孵化说来也是机缘巧合的事&#xff0c;本人于13年大学毕业后去了一家大型的国企工作&#xff0c;慢慢的走上了工业软件&#xff0c;上位机软件开发的道路。于14年正式开发基于windows的软件&#xff0c;当时可选的技术栈就是MFC和C#的winform&#xff…

【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

文章目录Gorgeous SequenceTyvj 1518 CPU监控【清华集训2015】VNaive OperationsPictureWalking RaceGorgeous Sequence HDU5306 操作 区间与xxx取min\rm minmin查询区间最大值查询区间和 比较暴力的线段树维护区间 Max : 区间最大值sub_max : 严格小于最大值的区间次大值…

Acwing 1089. 烽火传递

Acwing 1089. 烽火传递 题意&#xff1a; 有n个数&#xff0c;要保证每m个数中必须选一个&#xff0c;问所选数的最小总和是多少 题解&#xff1a; 我一开始设的状态为:dp[i]表示前i个数选完的最小值&#xff0c;第i个数可以选也可以不选&#xff0c;但是这样一个状态&…

CF886E Maximum Element(dp、组合数学)

Solution\text{Solution}Solution 纯纯的dp题。 关键在于我们 dp 时只关注不同元素之间的相对大小。 非法情况不易统计&#xff0c;考虑转而考虑合法情况再用全排列减。 设计 fif_ifi​ 为长度为 iii 的排列循环到一直最后也没有跳出的方案数。 枚举最大的元素 iii 放置的位置…

IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

--以下内容针对 ASP.NET Core2.1&#xff0c;2.2出现IIS进程内寄宿 暂不展开讨论---相比ASP.NET&#xff0c;出现了3个新的组件:ASP.NET Core Module、Kestrel、dotnet.exe&#xff0c; 后面我们会理清楚这三个组件的作用和组件之间的交互原理。 ASP.NET Core 设计的初衷是开源…

CF1710B-Rain【堆】

正题 题目链接:https://www.luogu.com.cn/problem/CF1710B 题目大意 一个数轴&#xff0c;每个位置上开始时都有一个ax0a_x0ax​0&#xff0c;nnn次操作pi,hip_i,h_ipi​,hi​对于所有位置axa_xax​令其变为axmax⁡(hi−abs(pi−x),0)a_x\max(h_i-abs(p_i-x),0)ax​max(hi​−…

数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission

文章目录RobotProduct SumBuilding BridgesJump missionRobot BZOJ3938 机器人每次一旦改变速度&#xff0c;直到下一次改变速度为止 这一时间段内机器人的位置下标可以用一次函数表示 如果知道时刻t1t_1t1​即将改变速度的机器人位置&#xff0c;以及最近的下一次机器人速…

模板:拉格朗日插值(多项式)

所谓拉格朗日插值&#xff0c;就是在“拉格朗日”进行的一项民俗活动。拉格朗日通常在每年2月的第82个星期三。 &#xff08;逃&#xff09; 前言 非常强大的算法。 当可以证明某个函数是一个 kkk 次多项式时&#xff0c;我们就可以插入 k1k1k1 个函数值并快速的求出我们要求…

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀&#xff0c;由于公司业务不断扩大&#xff0c;线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题&#xff0c;那就不需要修改程序菜菜我是想加服务器来解决这个问题&#xff0c;但是有个问题呀程序员主力 Y总&#xff1f;&#xff1f;&#xff1f;菜…

2019 ICPC Asia Nanjing Regional

题号题目难度知识点AA Hard Problem签到题思维题BChessboardCDigital Path签到题dfs记忆化搜索DHolesEObservationFPaper GradingGPoker GameHPrince and Princess四稳铜快银思维题ISpace StationJSpyKTriangle三题快铜计算几何

uoj#751-[UNR #6]神隐【交互】

正题 题目链接:https://uoj.ac/problem/751 题目大意 有一棵nnn个点的树&#xff0c;你每次可以选择一个边集&#xff0c;交互库会返回你所有联通块&#xff0c;要求这棵树。 n≤2000n\leq 2000n≤2000&#xff0c;操作次数不超过141414。 或 n≤131072n\leq 131072n≤131072…

模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)

文章目录前言解析OR定义变换&#xff1a;逆变换代码AND代码XOR定义变换逆变换代码所谓快速沃尔什变换&#xff0c;就是快速的沃尔玛什锦专柜变换 &#xff08;逃&#xff09; 前言 正常卷积的定义&#xff1a;ck∑ijkaibjc_k\sum_{ijk}a_ib_jck​∑ijk​ai​bj​。 可以用FFT…