首页 > 其他分享 >2023年多校联训NOIP层测试2

2023年多校联训NOIP层测试2

时间:2023-08-06 13:45:17浏览次数:40  
标签:node return NOIP int 多校 生成 fa 联训 inline

T1 斐波那契树

题目

image

思路

题解做法:

可以先把白色边权看成1,黑色边权看成0,求最小生成树和最大生成树,判断这两个值之间是否存在一
个斐波那契数。可以证明这中间的值都是可以出现的(参考求恰好k条白边的思路,BZOJ2654)。

我的做法:
找到最小生成树和最大生成树的值。

看它们是否在

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int T,n,m,fa[N],f[30];
struct node{int from,to,w;}e[N];
inline bool cmp1(node x,node y){
	return x.w<y.w;
} 
inline bool cmp2(node x,node y){
	return x.w>y.w;
}
inline int ff(int x){
	if(x!=fa[x])
		fa[x]=ff(fa[x]);
	return fa[x];
}
inline bool kru(int &ans){
	int cnt=0;
	for(int i=1;i<=n;++i) fa[i]=i;
	for(int i=1;i<=m;++i){
		if(cnt==n-1) break;
		int x=ff(e[i].from),y=ff(e[i].to);
		if(x!=y){
			fa[x]=y;
			ans+=e[i].w;
			++cnt; 
		}
	}
	return cnt==n-1;
}
signed main(void){
	scanf("%lld",&T);
	f[1]=f[2]=1;
	for(int i=3;i<=30;++i) f[i]=f[i-1]+f[i-2]; 
	while(T--){
		int minn=0,maxx=0;
		memset(e,0,sizeof e);
		scanf("%lld%lld",&n,&m);
		for(int x,y,z,i=1;i<=m;++i){
			scanf("%lld%lld%lld",&e[i].from,&e[i].to,&e[i].w);
		}
		sort(e+1,e+m+1,cmp1);
		if(!kru(minn)){
			printf("NO\n");
			continue;
		}
		sort(e+1,e+m+1,cmp2);
		if(!kru(maxx)){
			printf("NO\n");
			continue; 
		}
		for(int i=1;;++i){
			if(f[i]>=minn&&f[i]<=maxx){
				printf("YES\n");
				break;
			}
			else if(f[i]>maxx){
				printf("NO\n");
				break;
			}
		}
	}
	return 0;
} 

标签:node,return,NOIP,int,多校,生成,fa,联训,inline
From: https://www.cnblogs.com/GOD-HJ/p/17609343.html

相关文章

  • 2023年多校联训NOIP层测试4+洛谷 8 月月赛 I & RiOI Round 2
    2023年多校联训NOIP层测试4爆零了T1幸运数字\(0pts\)T2密码\(0pts\)没做到,咕了。T3小X和他的朋友们\(0pts\)没做到,咕了。T4树上询问\(0pts\)没做到,咕了。【LGR-150-Div.2】洛谷8月月赛I&RiOIRound2T1luoguP9496「RiOI-2」hacker\(100pts\)......
  • 2023年牛客多校第五场A
    1:题目链接https://ac.nowcoder.com/acm/contest/57359/A题意:给你一个数组,让你找出区间l,r之间满足l≤i<j<k≤r,ai=ak>aj的个数思路1:我们先找出当前位置x小于x的数有多少个例如:9854515158对应:0000102037你会发现假如有i,k,j满足,则个数为......
  • 2023牛客暑期多校训练营6 GEC
    2023牛客暑期多校训练营6G-Gcd题意:一开始给你一个集合\(S=\lbracex,y\rbrace(x\neqy)\)。然后你可以执行以下两个操作:1.从\(S\)中选择两个元素\(a,b(a\neqb)\),把\(a-b\)加入集合。2.从\(S\)选择2个元素是\(a,b(a\neqb)\),把\(gcd(|a|,|b|)\)加入集合里面。特别......
  • HDU 暑假多校 2023 第六场
    目录写在前面733673417345733773397338写在最后写在前面补题地址:https://acm.hdu.edu.cn/listproblem.php?vol=64,题号7336~7346。哈哈,单刷5题,我是只会做套路题的飞舞。Boc'z那个单曲太牛逼了,最喜欢的一首,但是live上唱的这首是真难绷。以下按个人向难度排序。7336显然......
  • 牛客暑假多校 2023 第六场
    目录写在前面GECBA写在最后写在前面比赛地址:https://ac.nowcoder.com/acm/contest/57360。哈基米牛魔酬宾,哈比下,哈比下,奥利安费,阿米诺斯!以下按照个人向难度排序。G\(a-b\)相当于辗转相减,\(\gcd(|a|,|b|)\)和直接\(\gcd\)没什么区别。于是当\(z=0\)时,\(x,y\)中一......
  • 2023年多校联训NOIP层测试3+「SFCOI-3」Sadness Fan Club Round 3
    2023年多校联训NOIP层测试3T1数列变换\(10pts\)考虑暴力,发现\(f\)数列进行一次变换\(A\),再进行一次变换\(B\)后,恢复成了原数列;\(f\)数列进行一次变换\(B\),再进行一次变换\(A\)后,也恢复成了原数列。即变换\(A\)可以和变换\(B\)相互抵消。本质是差分是前缀......
  • 【题解】[2023牛客多校] Distance
    题目传送门:[2023牛客多校]Distance题意对于任意两个元素个数相同的set:A、B,每次可以执行以下两种操作之一:将A中的任意元素加一将B中的任意元素加一\(C(A,B)\)含义为将\(A、B\)改变为完全相同的set所需要花费的最小次数;初始给你两个set:\(S、T\),计算\(\sum_{A\subs......
  • [Ynoi2012] NOIP2015 充满了希望(扫描线+线段树)
    题目传送门solution简单题。我们正着做扫描线。设\(t_i\)表示位置\(i\)最后一次进行二操作的时间,那么一操作就是交换\(t_x,t_y\),二操作就是区间复制。对于三操作,开一个树状数组,如果查询的位置的\(t_x=j\),就在\(j\)的位置上加一。查询就是查询后缀和。#include<bit......
  • P7116 [NOIP2020] 微信步数
    原题简化题意:有一个k维场地,第i维宽为wi,即第i维的合法坐标为1,2,···,wi。小C有一个长为n的行动序列,第i元素为二元组(ci,di),表示这次行动小C的坐标由(x1,x2,...,xci,...,xk)变为(x1,x2,...,xci+di,...,xk)。小C会将行动......
  • 牛客多校友谊赛
    D-吹_23暑假友谊赛No.2(nowcoder.com)#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;constintN=1e6+50,INF=0x3f3f3f3f;inta[N],dp[N][2];signedmain(){intn;cin>>n;for......