首页 > 其他分享 >蓝桥杯 2023 省 A 网络稳定性

蓝桥杯 2023 省 A 网络稳定性

时间:2023-05-14 11:00:35浏览次数:52  
标签:ch pw fw 稳定性 蓝桥 100000 2023 buf define

蓝桥杯撞题NOIP原题,做法也一模一样(撞题:NOIP2013提高组 货车运输)
由题意可得这是让我们先求一个最大生成树(把求最小生成树反过来求即可),再求最小边权。
求最大生成树我们可以用并查集+排序做出。
求最小边权我们可以LCA,也可以树链剖分+线段树维护。后者码量太大(本人太懒),没打算写。
代码:

#include<cstdlib>
#include<cstdio>
#include<cctype>
typedef long long LL;
typedef unsigned long long ULL;
namespace FastIo{
    typedef __uint128_t L;
    static char buf[100000],*p1=buf,*p2=buf,fw[100000],*pw=fw;
    #define gc p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++
    inline void pc(const char &ch){
    	if(pw-fw==100000)fwrite(fw,1,100000,stdout),pw=fw;
    	*pw++=ch;
	}
    #define fsh fwrite(fw,1,pw-fw,stdout),pw=fw
	struct FastMod{
        FastMod(ULL b):b(b),m(ULL((L(1)<<64)/b)){}
        ULL reduce(ULL a){
            ULL q=(ULL)((L(m)*a)>>64);
            ULL r=a-q*b;
            return r>=b?r-b:r;
        }
        ULL b,m;
    }HPOP(10);
    struct QIO{
    	char ch;
    	int st[40];
    	template<class T>inline void read(T &x){
    		x=0,ch=gc;
    		while(!isdigit(ch))ch=gc;
    		while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=gc;}
		}
		template<class T>inline void write(T a){
			if(a<0)a=-a,pc('-');
			do{st[++st[0]]=HPOP.reduce(a);a/=10;}while(a);
			while(st[0])pc(st[st[0]--]^48);
			pc('\n');
		}
	}qrw;
}
using namespace FastIo;
#define P(A) A=-~A
#define fione(begin,end) for(register int i=begin;i<=end;P(i))
#define fdone(begin,end) for(register int i=begin;i>=end;--i)
#include<algorithm>
#define INF 10e8+5
#define NUMLCA 20
#define NUMBER1 100000
#define NUMBER2 300000
struct edge{
	int u,v,dis;
	bool operator<(const edge &a)const{return dis>a.dis;}
}ed[NUMBER2+2];
struct NODE{int next,to,w;}e[(NUMBER2<<1)+5];
int head[NUMBER1+5],f[NUMBER1+5],fa[NUMBER1+5][NUMLCA+2],worth[NUMBER1+5][NUMLCA+2],tot(0),depth[NUMBER1+5];
bool visit[NUMBER1+5];
inline void add(int u,int v,int w){e[++tot].next=head[u];e[tot].to=v,e[tot].w=w,head[u]=tot;}
int find(int x){return x==f[x]?f[x]:f[x]=find(f[x]);}
void lca_dfs(int u){
	visit[u]=true;
	for(register int i=head[u];i;i=e[i].next)
		if(!visit[e[i].to]){
			depth[e[i].to]=depth[u]+1,fa[e[i].to][0]=u,worth[e[i].to][0]=e[i].w;
			lca_dfs(e[i].to);
		}
}
inline void LCA(int x,int y){
	if(find(x)!=find(y))return qrw.write(-1),void();
	if(depth[x]>depth[y])std::swap(x,y);
	int c=depth[y]-depth[x],ans(INF);
	fdone(NUMLCA,0)
		if(c&(1<<i)){
			ans=std::min(ans,worth[y][i]);
			y=fa[y][i];
		}
	if(x==y)return qrw.write(ans),void();
	fdone(NUMLCA,0)
		if(fa[x][i]!=fa[y][i]){
			ans=std::min(ans,std::min(worth[x][i],worth[y][i]));
			x=fa[x][i],y=fa[y][i];
		}
	qrw.write(std::min(ans,std::min(worth[x][0],worth[y][0])));
}
signed main(){
	int n,m,q,u,v,w;
	qrw.read(n);
	qrw.read(m);
	qrw.read(q);
	fione(1,m){
		qrw.read(u);
		qrw.read(v);
		qrw.read(w);
		ed[i].u=u,ed[i].v=v,ed[i].dis=w;
	}
	fione(1,n)f[i]=i;
	std::sort(ed+1,ed+1+m);
	fione(1,m){
		u=find(ed[i].u),v=find(ed[i].v);
		if(u==v)continue;
		f[u]=v;
		add(ed[i].u,ed[i].v,ed[i].dis);
		add(ed[i].v,ed[i].u,ed[i].dis);
	}
	fione(1,n)
		if(!visit[i]){
			depth[i]=1;
			lca_dfs(i);
			fa[i][0]=i,worth[i][0]=INF;
		}
	for(register int j(1);j<=NUMLCA;P(j))
		fione(1,n){
			fa[i][j]=fa[fa[i][j-1]][j-1];
			worth[i][j]=std::min(worth[i][j-1],worth[fa[i][j-1]][j-1]);
		}
	while(q--){
		qrw.read(u);
		qrw.read(v);
		LCA(u,v);
	}
	fsh;
    exit(0);
    return 0;
}

标签:ch,pw,fw,稳定性,蓝桥,100000,2023,buf,define
From: https://www.cnblogs.com/SHOJYS/p/17398900.html

相关文章

  • NOC 2023 知识点
    NOC2023知识点1.函数的定义1.1函数的名字只能是数字、字母或下划线,不可以用数字开头(int2abc是非法的),不可以使用关键字名称(intchar是非法的)。1.2函数可以嵌套调用,但是不可以嵌套定义。如下例。intfun1(){...}intfun2(){func1();//合法...}i......
  • 基于MPC算法实现的车辆稳定性控制,建立了横摆角速度r、侧向速度、前后质心侧偏角动力学
    基于MPC算法实现的车辆稳定性控制,建立了横摆角速度r、侧向速度、前后质心侧偏角动力学模型作为预测模型,同时考虑车辆的稳定性可通过控制车辆的侧向速度维持在一定范围内保证车辆的稳定性,因此在模型预测控制算法(MPC)中对车辆侧向速度进行软约束(softconstrain),同时对控制量前轮转角和......
  • 基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层ARS产生期望后轮转角度,DYC产生横
    基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层ARS产生期望后轮转角度,DYC产生横摆力矩Mz,下层采用基于附着系数和车速对附加横摆力矩进行分配,控制效果良好,能实现车辆在高低附着系数路面下的稳定性,可应用在高速下高低附着系数路面下的轨迹跟踪的横向稳定性控制住。资料中有参......
  • 基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层ARS产生期望后轮转角度,DYC产生横
    基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层ARS产生期望后轮转角度,DYC产生横摆力矩Mz,下层采用基于附着系数和车速对附加横摆力矩进行分配,控制效果良好,能实现车辆在高低附着系数路面下的稳定性,后续可应用在高速下高低附着系数路面下的轨迹跟踪的横向稳性。资料中包含对应......
  • 2023-5-13
    彻夜……前几天摸鱼摆烂玩游戏,偶尔学习。写写代码。其实是事情都忘了……今天早上喝的一口可乐混合着不知道什么液体,反胃吐出来在手上留下了一点棕色的痕迹,然后洗掉了,大概是通宵的代价现在是醒着的第38个小时,预计还要醒几个小时,现在都不敢趴下,一趴下就会睡着误事……早上......
  • 2023/5/13
    L1-019谁先倒分数 15全屏浏览题目作者 陈越单位 浙江大学划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两......
  • Astro - CNAO2023
    ...Day-10开始停课Day-4觉得傅科摆是伪科学。?:摆确实受力情况改变了,但是不能证明是由地球自西向东自转引起的;只能说明地球在转动(因为摆受力不在同一平面上)!:傅科摆的理想模型是干嘛的。恒星时和太阳时的换算考虑整个轨道周期中,不同计时系统意味着的行星(地球)的不同运......
  • 2023年5月13日
    实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0,1,2或3:为0时表示输入结束;为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。从每行......
  • 2023 5 13
    #include<iostream>#include<iomanip>#include<bitset>usingnamespacestd;intmain(){doublen=3.1415926;#include<iostream>#include<iomanip>usingnamespacestd;intmain(){intn;cin>>n;......
  • 编程一小时2023.5.13
    1.#include<bits/stdc++.h>usingnamespacestd;intn,x,ans=0,sum=0,a[1001],b[1001];intmain(){memset(a,0,sizeof(a));memset(b,0,sizeof(b));n=10;for(inti=1;i<=n;i++){cin>>x;if(x%2!=0)a[++ans]=x;elseb[+......