题目大意:给定一个 N 个点无向图的一棵生成树和另外 M 条边,第一次去掉生成树中的一条边,第二次去掉另外 M 条边中的一条边,求有多少种情况可以使得给定的无向图不连通。

题解:首先考虑该生成树,若新增加一条边,则会在树上形成一个环,这时若删除的树边在环上,则只有将环切断才能使得图不连通;若删除的树边不在环上,则切断任意一个其他边均可。因此,只需要计算出树上每条边是否在环中即可。再次分析加边过程,若在 x,y 两点加了一条边,则由 x,y,lca(x,y) 之间的所有边形成了一个环,将这条树链上的边权加一即可,由此引出树上差分做法,即:每个点记录下该点到父节点之间的边的环数,只需将 val[x],val[y] 加一,val[lca(x,y)] 减 2 即可,最后 dfs 求出子树和即可。注:根节点不参与答案贡献。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;inline int read(){int x=0,f=1;char ch;do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));return f*x;
}struct node{int nxt,to;
}e[maxn<<2];
int tot=1,head[maxn],val[maxn];
inline void add_edge(int from,int to){e[++tot]=node{head[from],to},head[from]=tot;
}
int n,m,f[maxn][30],dep[maxn];
long long ans;void dfs(int u,int fa){dep[u]=dep[fa]+1,f[u][0]=fa;for(int i=1;i<=20;i++)f[u][i]=f[f[u][i-1]][i-1];for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==fa)continue;dfs(v,u);}
}int lca(int x,int y){if(dep[x]<dep[y])swap(x,y);for(int i=20;i>=0;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i];if(x==y)return x;for(int i=20;i>=0;i--)if(f[x][i]^f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}void read_and_parse(){n=read(),m=read();for(int i=1,x,y;i<n;i++){x=read(),y=read();add_edge(x,y),add_edge(y,x);}dfs(1,0);
}void calc(int u,int fa){for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==fa)continue;calc(v,u);val[u]+=val[v];}if(u==1)return;else if(!val[u])ans+=m;else if(val[u]==1)++ans;
}void solve(){int x,y;for(int i=1;i<=m;i++){x=read(),y=read();++val[x],++val[y],val[lca(x,y)]-=2;}calc(1,0);printf("%lld\n",ans);
}int main(){read_and_parse();solve();return 0;
}

转载于:https://www.cnblogs.com/wzj-xhjbk/p/10157149.html

【LOJ#10131】暗的锁链相关推荐

  1. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  2. ios单应用模式_如何为iOS 13暗模式设置应用

    ios单应用模式 Apple launched the much-awaited iOS 13 updates globally on September 19 across all iPhones ...

  3. [短文速读] 重载有暗坑,JVM是如何执行方法的

    前言 这将是一个系列文章.原因是自己写了很多文章,也看了很多文章.从最开始的仅仅充当学习笔记,到现在认认真真去写文章去分享.中间发现了很多事情,其中最大发现是:收藏不看!总是想着先收藏以后有时间再看, ...

  4. LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理

    题目:https://loj.ac/problem/2721 1.注意别一输入 p[ i ] 就 a[ i ] %= p[ i ] ,因为在 multiset 里找的时候还需要真实值. 2.注意用 m ...

  5. 20万个法人、百万条银行账户信息,正在暗网兜售

    导语:推特用户爆料,暗网上正在出售大量中国数个银行的账号信息,经记者调查,本次打包售价 3999 美金中包含 90 万条中国农业银行账号信息,另外一账号还宣称出售二十个数据包,其中包括百万条银行账号数 ...

  6. 项目实践|如何在较暗环境进行人脸检测?

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:游璐颖,Datawhale优秀学习者,福州大学 计算机视觉在人脸检 ...

  7. 从暗通道先验去雾到海底图像修复-三维重建辅助计算摄影

    点击上方"小白学视觉",选择加"星标"或"置顶"重磅干货,第一时间送达 一. Sea Thru:海底图像修复 我想很多朋友一定看过海底的各种 ...

  8. 乖离性暗机器人_《乖离性百万亚瑟王》国服超弩暗机器人平民通关攻略

    乖离性百万亚瑟王国服第一次迎来新的机器人类型BOSS,难度还是比较大的!在打暗机器人的时候有什么需要注意的细节,我们一起来看看吧! 首先介绍一下暗机器人的属性数据: 属性:暗系 接下来介绍一下BOSS ...

  9. 为什么excel图片会变成代码_莲藕为什么会变色?焯水就发黑,炖汤就变粉色,甚至会变成暗紫色...

    秋冬季节,正是莲藕上市的时候.无论是七孔藕还是九孔藕,短藕还是长藕,在人们秋天的餐桌上,莲藕绝对占有一席之地.我们的湖北就是产藕大省,每年向全国各地输送着大量品质优秀的莲藕. 爱吃莲藕的朋友,可能会发 ...

最新文章

  1. 原来这才是游戏上瘾的机制 如果把它用到生活中的话
  2. php fatal class ziparchive not found,php中Fatal error: Class ZipArchive not found的解决办法
  3. python exe运行报 编码错误_python运行显示编码错误
  4. Django(part34)--一对多映射
  5. leetcode207. 课程表(dfs/bfs)
  6. 每天打卡心情好(洛谷P1664题题解,Java语言描述)
  7. C语言指针作为参数的传递问题
  8. 【Mysql高级语法:视图操作】
  9. java jsp公共异常页面_Java如何创建JSP错误页面以处理异常?
  10. Git工作笔记001---Windows下安装Git Core以及TortoiseGit安装与配置
  11. php在类方法里面检测错误,是否有任何PHP静态分析器可以检测不存在的类方法调用?...
  12. 阳江口碑好的java培训价格
  13. 如何将自己在github写的android library开源,让大家依赖使用
  14. java网吧系统_基于SSM框架下的JAVA网吧管理系统
  15. java opencv 纠偏_一种基于OpenCV的高拍仪拍摄文档物体纠偏方法与流程
  16. 【零基础】speech driven animation中文安装使用指南
  17. SYSLINUX 中文简介(怎样使用)
  18. ISO镜像转换成docker镜像
  19. numpy 5 study task
  20. 2023年华数杯国际赛数学建模

热门文章

  1. Puzzle项目实现
  2. 处理日常事务的 Linux 程序和它们的配置
  3. Table中行点击事件和复制事件冲突问题
  4. ESPlorer初步:固件烧写,资料下载(转自杨奉武博客)
  5. DFU(Device Firmware Update)
  6. 微信红包怎么改封面教程
  7. 苹果手机直播显示服务器,苹果的手机为什么不能直播?
  8. u-boot-2014.10移植第29天----nand flash的SPL启动(一)
  9. 谷歌人机验证reCAPTCHA使用
  10. 网络协议 -- HTTP协议