见面礼——图论

给定一个 n 个点 n 条边的无向图,你需要求有多少种选择图上的一个点 p 和一条边 (x,y) 的方案,使得删去 (x,y) 后图变成一棵树,且这棵树以 p 为根时每个节点的儿子个数均不超过 3。保证至少存在一种这样的方案。

Input
输入的第一行一个整数 n(2≤n≤105) 表示节点数,接下来 n 行每行两个整数 x,y(1≤x,y≤n) 描述图上的一条边。保证图中没有重边自环。

Output
输出一行一个正整数表示答案。

Input
6
1 2
1 3
1 4
1 5
1 6
2 3

Output
10

解析:

n个点n条边,所以该图就成一个环。只有将环中的一条边删去,该图才能变为一棵树。

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const int N=2e6+10;
vector <int> g[N];
map <int,int> k;
int p[N];
int d[N];
bool vis[N];
vector <PII> q;  //储存成环的边
int n;
void dfs(int u,int pa)
{p[u]=pa;vis[u]=1;for (auto v:g[u]){if (v==pa) continue;if (vis[v]==1&&q.size()==0)    //当点 v 被再次遍历时,现在已经建成一个环了,就可以回溯将环中的每条边放入队列 q 中{q.push_back({u,v});while (p[u]!=v){q.push_back({u,p[u]});u=p[u];}q.push_back({u,p[u]});}if (vis[v]==1) continue;  //走过的点,不用继续操作了,否则会死循环dfs(v,u);}
}
signed main()
{ios;cin>>n;for (int i=1;i<=n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);d[u]++;d[v]++;}for (int i=1;i<=n;i++){k[d[i]]++;  //记录度数相同的点的数量}//for (auto x:k) cout<<x.first<<" "<<x.second<<endl;dfs(1,0);//for (auto x:q) cout<<x.first<<" "<<x.second<<endl;int ans=0;for (auto x:q)   //遍历每条要删掉的边{int du=d[x.first];int dv=d[x.second];k[du]--;k[dv]--;k[du-1]++;k[dv-1]++;int res=0;bool flag=0;for (auto y:k)       //删除边后,再遍历每个点,判断能否成为根节点{int cnt=y.first;int s=y.second;if (cnt<=3) res +=s;if (cnt>=5&&s>0) flag=1;    //既当不了根节点,也当不了儿子节点}if (flag==0) ans +=res;k[du]++;  //还原k[dv]++;k[du-1]--;k[dv-1]--;}cout<<ans;return 0;
}

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

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

相关文章

python functools.wraps保留被装饰函数属性

作用 普通装饰器 &#xff0c;会覆盖函数名称&#xff0c;并且 会替换 函数 文档字符串 介绍 functools.wraps(wrapped[, assigned][, updated]) This is a convenience function for invoking partial(update_wrapper, wrappedwrapped, assignedassigned, updatedupdated) …

城市生命线丨桥梁健康监测系统应用详情

现代城市当中&#xff0c;桥梁的重要性以及危险性是最高的&#xff0c;因此&#xff0c;对于桥梁的安全健康监测就会变得更加的重要&#xff0c;在科技发展的今天&#xff0c;新型基础设施已经能够准确、实时的监测桥梁的安全和健康。 WITBEE万宾助力建设更健康&#xff0c;智慧…

sentinel 网关

网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。 这样的架构&#xff0c;会存在…

【Python】12 GPflow安装

概述 GPflow 是一个基于TensorFlow 在 Python 中构建高斯过程模型的包。高斯过程是一种监督学习模型。 高斯过程的一些优点是&#xff1a; 不确定性是高斯过程的固有部分。高斯过程可以在不知道答案时告诉您。适用于小型数据集。如果您的数据有限&#xff0c;高斯过程可以从…

Yolov8部署——vs2019遇到的问题

Yolov8部署——vs2019遇到的问题 问题一&#xff1a; 默认库"LIBCMT"与其他库的使用冲突 解决方法&#xff1a;选择自己的项目右键属性——c/c——代码生成——运行库&#xff08;多线程&#xff08;/MT&#xff09; 问题二&#xff1a; 文件包含在偏移0x18处开始…

buildadmin+tp8表格操作(2)----表头上方按钮绑定事件处理,实现功能(全选/全不选)

buildAdmin 表格上方的按钮添加完成之后&#xff0c; 就要对其实现功能了 有了上面的说明&#xff0c; 我就只要得到了 ref 中的表格对象&#xff0c; 就可以象el-table 一样来操作表格的属性和方法了 我们来实现上面的几个按钮的方法 全选/全不选 上面就是添加按钮功能的全过…

算法——动态规划(新)

什么是动态规划&#xff1f; 动态规划算法的基本思想-求解步骤-基本要素和一些经典的动态规划问题【干货】-CSDN博客 一、三步问题 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 思路 我们要知道&#xff0c;走楼梯&#xff0c;前三个阶梯步数已经知道&…

4-5学生分数对应的成绩

![#include<stdio.h> int main(){float score;char grade;for(int i0;i<7;i){printf("请输入成绩&#xff1a;");scanf("%f",&score);while(score>100||score<0){printf("\n输入的成绩有误&#xff0c;请重新输入&#xff1a;&quo…

深入了解百度爬虫工作原理

在当今数字化时代&#xff0c;互联网已经成为人们获取信息的主要渠道之一。而搜索引擎作为互联网上最重要的工具之一&#xff0c;扮演着连接用户与海量信息的桥梁角色。然而&#xff0c;我们是否曾经好奇过当我们在搜索引擎中输入关键词并点击搜索按钮后&#xff0c;究竟是如何…

mac 清除 iTerm2 终端屏幕内容

在 iTerm2 或 Mac 终端中清除当前屏幕上的所有内容&#xff0c;你可以使用以下快捷键&#xff1a; 1&#xff0c; clear 命令&#xff0c;仅仅清除当前屏幕&#xff0c;鼠标向上滚动时仍能看见旧的内容 2&#xff0c;Commd K&#xff0c;清除所有屏幕上的内容&#xff0c;鼠…

【18年扬大真题】给定有m个整数的递增有序数组a和有n个整数的递减有序数组b,将a数组和b数组归并为递增有序的数组c

【18年扬大真题】 给定有m个整数的递增有序数组a和有n个整数的递减有序数组b&#xff0c; 将a数组和b数组归并为递增有序的数组c。 void Merge(int arr[],int m ,int brr[],int n,int crr[]) {int i 0;int j n-1;int k 0;while(i < m&&j > 0) {if (arr[i] &l…

Cesium 问题:输出的 纬度 latitude 是 0

文章目录 问题分析问题 在坐标转换的时候,出现如下问题 分析 在检查代码后,发现我将转换之前的高度默认设置为了 0 ,因此没能正确转换 let positionsOnCircle = [];// 圆面边缘的点 let numPoints = 360; for (let i

asp.net在线考试系统+sqlserver数据库

asp.net在线考试系统sqlserver数据库主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; 首页 登陆 用户角色 管理员&#xff08;对老师和学生用户的增删改查&#xff09;&#xff0c;老师&#xff08;题库管理 选择题添加 选择题查询 判断题添加…

图片叠加_图片压缩

图片叠加 try {/* 1 读取第一张图片*/File fileOne new File("1.png");BufferedImage imageFirst ImageIO.read(fileOne);/* 2读取第二张图片 */File fileTwo new File("2.png");BufferedImage imageSecond ImageIO.read(fileTwo);//创建一个最底层画…

详解JS遍历数组的十八种方法

for循环 let arr[1,2,3] for(let i0;i<arr.length;i){console.log(arr[i]) }for循环可以遍历数组&#xff0c;它一共有三个参数&#xff0c;第一个参数可以当成数组索引值&#xff0c;想要遍历时候可以设置初始值为0&#xff0c;然后以数组长度为判断依据&#xff0c;如果不…

STM32 SPI

SPI介绍 SPI是Serial Pepheral interface缩写&#xff0c;串行外围设备接口。 SPI接口是一种高速的全双工同步通信总线&#xff0c;已经广泛应用在众多MCU、存储芯片、AD转换器和LCD之间。大部分STM32有3个SPI接口&#xff0c;本实验使用的是SPI1。 SPI同一时刻既能发送数据&…

vue3+vite+ts 发布自定义组件到npm

vue3vite 发布自定义组件到npm 初始化项目编写组件配置打包组件上传到npm测试组件库 初始化项目 // 创建项目 pnpm create vite vue-test-app --template vue-ts// 运行项目 cd vite vue-test-app pnpm install pnpm run dev编写组件 1、根目录下创建packages目录作为组件的开…

Android 9.0 设备蓝牙、位置、WIFI、NFC功能默认关闭

Android 9.0 设备蓝牙、位置、WIFI、NFC功能默认关闭 近来陆陆续续处理了一些需要将蓝牙、位置、WIFI、NFC功能默认为关闭状态的需求&#xff0c;于是今天在这里总结一下这些修改点的具体修改方法&#xff0c;具体修改参照如下&#xff1a; 蓝牙、位置、WIFI功能默认关闭&…

独立成分分析matlab代码

独立成分分析matlab代码 在文章 信号去噪之独立成分分析&#xff08;ICA&#xff09; 中以python代码为例&#xff0c;有读者朋友问matlab代码&#xff0c;以下给出示例&#xff1a; python: import numpy as np from sklearn.decomposition import FastICA import matplotl…

MindNode v5.0.1(思维导图软件)

思维导图软件哪个比较好呢&#xff1f;MindNode for mac一款功能简单&#xff0c;界面简洁&#xff0c;不用看教程都会用的思维导图软件。mindnode mac可随时随地记录自己的想法&#xff0c;让您从灵感入手&#xff0c;将奇思妙想铺陈在画布上&#xff0c;让一切井井有条。 Mi…