【简单图论】CF1833 E

这篇具有很好参考价值的文章主要介绍了【简单图论】CF1833 E。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem - E - Codeforces

题意:

【简单图论】CF1833 E,图论,图论,算法

【简单图论】CF1833 E,图论,图论,算法 【简单图论】CF1833 E,图论,图论,算法

 思路:

显然,最大值就是什么边都不连的连通块个数,最小值就是能连的都连上

那就是,如果一个连通块存在度为1的点,就把它当作接口连接

Code:文章来源地址https://www.toymoban.com/news/detail-603365.html

#include <bits/stdc++.h>

#define int long long

using namespace std; 

const int mxn=2e5+10;

int N,x;
int F[mxn],FG[mxn],sz[mxn];

set<int> G[mxn];

int find(int x){
	return F[x]=(x==F[x])?x:find(F[x]);
}
void join(int u,int v){
	int f1=find(u),f2=find(v);
	if(f1!=f2){
		F[f1]=f2;
		sz[f2]+=sz[f1];
	}
}
void solve(){
	cin>>N;
	for(int i=1;i<=N;i++){
		F[i]=i;
		sz[i]=1;
		G[i].clear();
		FG[i]=0;
	}
	for(int i=1;i<=N;i++){
		cin>>x;
		G[i].insert(x);
		G[x].insert(i);
		join(x,i);
	}
	for(int i=1;i<=N;i++){
		FG[find(i)]|=(G[i].size()==1);
	}
	int cnt=0,res=0;
	for(int i=1;i<=N;i++){
		if(find(i)==i){
			res++;
			cnt+=FG[i];
		}
	}
	cout<<min(res,res-cnt+1)<<" "<<res<<'\n';
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;cin>>__;
	while(__--)solve();return 0;
} 

到了这里,关于【简单图论】CF1833 E的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图论经典题目讲解】CF715B - Complete The Graph

    D e s c r i p t i o n mathrm{Description} Description 给定一张 n n n 个点, m m m 条边的无向图,点的编号为 0 ∼ n − 1 0sim n-1 0 ∼ n − 1 ,对于每条边权为 0 0 0 的边赋一个不超过 1 0 18 10^{18} 1 0 18 的 正整数 权值,使得 S S S 到 T T T 的最短路长度为 L L L 。 S o l u t i o n mathrm{Solution} Solut

    2024年02月19日
    浏览(37)
  • CF1120 D. Power Tree 巧妙的图论转化

    传送门 [前题提要]:无 题目描述: 考虑对一个点的子树的所有 叶子节点 进行增减任意值.不难联想到对一个点的子树的 所有节点 增减任意值的做法.所以考虑使用类似于树链剖分的方式将树上修改化为链上区间修改. 考虑记录一个点的所有叶子节点,并且按照 d f s dfs df s 序将其

    2024年02月10日
    浏览(37)
  • 【图论经典题目讲解】CF786B - Legacy 一道线段树优化建图的经典题目

    D e s c r i p t i o n mathrm{Description} Description 给定 1 1 1 张 n n n 个点的有向图,初始没有边,接下来有 q q q 次操作,形式如下: 1 u v w 表示从 u u u 向 v v v 连接 1 1 1 条长度为 w w w 的有向边 2 u l r w 表示从 u u u 向 i i i ( i ∈ [ l , r ] iin [l,r] i ∈ [ l , r ] )连接 1 1 1 条长度为 w w w

    2024年02月20日
    浏览(83)
  • P1833 樱花(多重背包)(内附封面)

    《爱与愁的故事第四弹·plant》第一章。 爱与愁大神后院里种了 n n n 棵樱花树,每棵都有美学值 C i ( 0 ≤ C i ≤ 200 ) C_i(0 le C_i le 200) C i ​ ( 0 ≤ C i ​ ≤ 200 ) 。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一

    2024年02月14日
    浏览(23)
  • c++图论免费ppt,简单深度理解图论

    本篇博文想分享一个ppt,是帮助大家简单深度理解c++图论. 作者承诺:分享的东西没有病毒,是资料。 分享的东西一个是ppt,ppt里面是150页的,里面将带领大家简单深度理解c++图论,还有一个就是里面例题的数据,大家可以按照数据与例题自己练练! 分享的东西免费!免费!免

    2024年02月10日
    浏览(33)
  • 简单图论的知识

    Floyd算法是一种求解多源最短路问题的算法。 在floyd中,图一般用邻接矩阵存储,边权可正可负,利用动态规划思想,逐步求解出任意两点之间的最短距离。 我们需要准备一个数组d[N][N][N],初始化无穷。 d[k][i][j]表示路径(除去起点和终点)中编号最大的点编号=k的情况下,点

    2024年04月13日
    浏览(58)
  • 简单图论:旅行

    最小生成树(Kruskal算法) 不同的的最小生成树: 不是连通的权重最小; 而是连通起始点和终点的路径上最大最小速度比值最小。 如何使得速度比值最小: 问题1:什么情况下比值最小? ( 1 、 3 、 5 、 4 、 2 ) ⇒ ( 1 、 2 、 3 、 4 、 5 ) (1、3、5、4、2) Rightarrow (1、2、

    2024年02月11日
    浏览(29)
  • 简单图论:迷路

    迷路 windy 在有向图中迷路了。 该有向图有 n n n 个节点,节点从 1 1 1 至 n n n 编号,windy 从节点 1 1 1 出发,他必须恰好在 t t t 时刻到达节点 n n n 。 现在给出该有向图,你能告诉 windy 总共有多少种不同的路径吗? 答案对 2009 2009 2009 取模。 注意:windy 不能在某个节点逗留,且

    2024年02月12日
    浏览(27)
  • 简单图论:指数移动

    小明所跑的路径,可以分成几段,每一段长为 2 t 2^t 2 t , 所以关键在于确定任意点对 ( i , j ) (i, j) ( i , j ) 点之间是否存在 2 t 2^t 2 t 的路径。 由于要计算所有点对之间的路径,所以用 Floyd 算法。 1、 计算出一个新图,初始化所有节点间的距离为无穷大。 2、若点对 ( i , j )

    2024年02月13日
    浏览(33)
  • 洛谷题单 -- 图论的简单入门

    图的存储 - 洛谷 这一题要考察图的存储方式 , 一般可以使用邻接矩阵 或 邻接表来存储 图的结点 和1 边的信息 ,详情请看代码 :  【深基18.例3】查找文献 - 洛谷 这题考察有向图的 dfs 和 bfs ,详情请看代码,如果用邻接矩阵的话一定会mle,只能够使用邻接表,我这里采用的是用

    2024年04月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包