首页 > 其他分享 >牛客练习赛104 D 逃亡的贝贝

牛客练习赛104 D 逃亡的贝贝

时间:2022-10-21 22:14:10浏览次数:72  
标签:练习赛 int maxa mid 牛客 include ahaha 104 define

https://ac.nowcoder.com/acm/contest/43058/D

思路

二分答案,对于超过当前答案并且操作后可以使用的边边权当做1,短边当做0,跑一遍最短路,非常经典的二分题

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#include<cmath>
#include<queue>
#define ll long long
#define gc getchar
#define maxn 100005
#define maxm 200005
using namespace std;

inline ll read(){
	ll a=0;int f=0;char p=gc();
	while(!isdigit(p)){f|=p=='-';p=gc();}
	while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
	return f?-a:a;
}int n,m,S,T,k;
ll l,r,ans;

struct ahaha1{
	ll w;int to,next;
}e[maxm<<1];int tot,head[maxn];
inline void add(int u,int v,ll w){
	e[tot].w=w,e[tot].to=v,e[tot].next=head[u];head[u]=tot++;
}

inline ll chu(ll x){
	return ceil(114.0*x/514);
}

struct ahaha{
	int d,id;
	inline bool friend operator<(const ahaha x,const ahaha y){
		return x.d>y.d;
	}
};
priority_queue<ahaha>q;

int d[maxn];
inline int pan(int maxa){
	for(int i=1;i<=n;++i)d[i]=k+1;
	priority_queue<ahaha>q1;
	swap(q,q1);d[S]=0;
	q.push((ahaha){0,S});
	/*for(int i=head[S];~i;i=e[i].next){
		int v=e[i].to;
		if(chu(e[i].w)>maxa)continue;
		if(e[i].w>maxa)d[v]=1,q.push((ahaha){1,v});
		else d[v]=0,q.push((ahaha){0,v});
	}*/
	while(!q.empty()){
		ahaha a=q.top();q.pop();
		int u=a.id;
		for(int i=head[u];~i;i=e[i].next){
			int v=e[i].to;if(d[v]<=a.d)continue;
			if(e[i].w>maxa){
				if(a.d==k||chu(e[i].w)>maxa)continue;
				if(d[v]<=a.d+1)continue;
				if(v==T)return 1;
				d[v]=a.d+1;
				q.push((ahaha){d[v],v});
			}
			else{
				if(d[v]<=a.d)continue;
				if(v==T)return 1;
				d[v]=a.d;
				q.push((ahaha){a.d,v});
			}
		}
	}
	return d[T]<=k;
}

int main(){memset(head,-1,sizeof head);
	n=read();m=read();S=read();T=read();k=read();
	for(int i=1;i<=m;++i){
		int u=read(),v=read();ll w=read();
		add(u,v,w);add(v,u,w);
		r=max(r,w);
	}
	ans=-1;
	if(S==T)r=0,ans=0;
	l=1;
	while(l<=r){
		int mid=l+r>>1;
		if(pan(mid))ans=mid,r=mid-1;
		else l=mid+1;
	}
	if(ans==-1){
		puts("I really need TS1's time machine again!");
		return 0;
	}
	printf("%lld\n",ans);
	return 0;
}

标签:练习赛,int,maxa,mid,牛客,include,ahaha,104,define
From: https://www.cnblogs.com/hanruyun/p/16814924.html

相关文章

  • 牛客练习赛104 C 1919810
    https://ac.nowcoder.com/acm/contest/43058/C思路一个很简单的dp记录每一位i可以给下一位的j提供的方案数理论上层数应该倒着枚举,但是我这个写法恰好避免了重复,所以正......
  • 牛客练习赛104 B 114514
    https://ac.nowcoder.com/acm/contest/43058/B思路要求1~n满足如下式子的个数\((i^{11}-i)(i^{451}-i^4)\equiv(i^{11}-i^4)(i^{11}-i)(mod451*4)\)打表可知,全都符合......
  • CF1045G 题解
    前言题目传送门!更好的阅读体验?和模版稍有不同的cdq分治。思路cdq是离线算法,所以我们可以先给\(x_i\)离散化一下。同时,记录下\((x_i-r_i)\)与\((x_i+r_i)......
  • 牛客SQL-employees表(一):195-220
    195.查找employees里最晚入职员工的所有信息SELECT*FROMemployeesWHEREhire_date=(SELECTMAX(hire_date)FROMemployees)/*#如果员工入职的日期都不是同一......
  • 牛客SQ-actor表:223-232
    223.使用join查询方式找出没有分类的电影id以及其电影名称SELECTfilm_id,titleFROMfilmt1LEFTJOINfilm_categoryt3USING(film_id)WHEREcategory_idISNULL......
  • Spring上传文件报错the request was rejected because its size (15920203) exceeds t
    背景今天在查异常日志的时候,发现了一条这样的报错therequestwasrejectedbecauseitssize(15920203)exceedstheconfiguredmaximum(10485760)详细堆栈如下:or......
  • AcCoders 10477:【省选基础数据结构 树链剖分】【GDOI2016】疯狂动物城 题解
    算法:树链剖分,可持久化线段树。题目大意给定\(n\)个结点的一棵树,\(m\)次操作,操作有三种:将\(x\)至\(y\)最短路径上的所有点的权值加上\(delta\)。对于\(x\)至......
  • 3的倍数【牛客】
    链接:https://ac.nowcoder.com/acm/contest/29035/E输入描述:第一行是一个整数T,表示有T组数据。接下来有T行,每行两个整数L,R(L<=R)。1<=T<=10,L<=R<=10^18。输出......
  • 牛客MySQL真题练习2(180-194)
    统计每款的SPU(货号)数量,并按SPU数量降序排序SELECTstyle_id,COUNT(item_id)ASSPU_numFROMproduct_tbGROUPBYstyle_idORDERBYSPU_numDESC统计实际总销售......
  • 牛客 指数循环节
     题目描述请注意每次的模数不同。输入描述:第一行两个整数n,m表示序列长度和操作数接下来一行,n个整数,表示这个序列接下来m行,可能是以下两种操作之一:操作1:区间[l,r]加上......