首页 > 其他分享 >【比赛】高一下二调

【比赛】高一下二调

时间:2024-03-31 10:44:45浏览次数:10  
标签:二调 int 一下 ll back long edge 比赛 dis

T1

用SPFA/DIJ跑一遍,顺便标记下路径和权值,然后依次改边值遍历跑SPFA/DIJ即可

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 250000+10;
int n,m,head[501],way[501][2],cnt,c2;int dis[501];
bool vis[501];
struct Edge
{
	int from,to,w,next;
}edge2[N],edge[N],e2[1002];
bool cmp(Edge a,Edge b)
{
	return a.w<b.w;
}
struct node
{
	int u;int dis;
	bool operator < (const node &A)const
	{
		return dis<A.dis;
	}
};
void add(int u,int v,int w)
{
	edge[++cnt].from=u;
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	edge[cnt].w=w;
	head[u]=cnt;	
}
bool fst=1;
int ans=INT_MAX,st,en;
void dij()
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	priority_queue <node> q;
	q.push({1,0});
//	q.push({100,0});
//	cout<<q.top().u<<endl;
	dis[1]=0;
//	cout<<"&&";
	while(!q.empty())
	{
		int u=q.top().u;q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].next)
		{
			int to=edge[i].to;
//			if(to==st&&u==en&&edge[i].w==ans)edge[i].w=2*ans;
//			if(to==en&&u==st&&edge[i].w==ans)edge[i].w=2*ans;
			if((to==en&&u==st&&edge[i].w==ans)||(to==st&&u==en&&edge[i].w==ans))
			{
				if(dis[to]>dis[u]+2*ans)
				{
					dis[to]=dis[u]+2*ans;
					q.push({to,-dis[to]});
				}	
			}
			else if(dis[to]>dis[u]+edge[i].w)
			{
				dis[to]=dis[u]+edge[i].w;
				if(fst==1)way[to][0]=u;way[to][1]=edge[i].w;
//				cout<<to<<" "<<dis[to]<<endl;
//				vis[to]=0;
				q.push({to,-dis[to]});
			}
		}
	} 
}
int T2;
void test()
{
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<" ";
}
main()
{
	freopen("traffic.in","r",stdin);
	freopen("traffic.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	int a,b,t;
	for(int i=1;i<=m;i++)
	{
		scanf("%lld%lld%lld",&a,&b,&t);
		add(a,b,t);add(b,a,t);
	}
//	cout<<T2<<endl;
//	cout<<"&"<<st<<" "<<en<<" "<<ans<<endl;
	dij();
	int T=dis[n];
	int x=n;
	int tot=0;
	fst=0;
	while(x)
	{
		int u=way[x][0];
		st=u;en=x;
		ans=way[x][1];
		dij();
//		cout<<u<<" "<<ans<<" "<<dis[n]<<endl;
		tot=max(tot,dis[n]-T);
//		cout<<u<<" "<<x<<endl;
		
		x=u;
		
	}
	cout<<tot;
//	test();
	return 0;
}
/*
5 7
1 2 10
1 3 2
3 2 16
5 3 14
3 4 6
4 2 14
4 5 4
*/

T2

二分即可

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 100000+5;
int n,m;ll cla[N];
ll ans;
bool check(ll mid)
{
	int tot=1;ll pos=cla[1];
	for(int i=2;i<=n;i++)
	{
		if(cla[i]-pos>=mid)
		{
			tot++;
			pos=cla[i];
		}
	}
	if(tot>=m)return 1;
	else return 0;
}
void fen(ll l,ll r)
{
	while(l<=r)
	{
		ll mid=(l+r)>>1;
		if(check(mid))
		{
			ans=mid;
			l=mid+1;
		}else
		{
			r=mid-1;
		}
	}
}
int main()
{
	freopen("classroom.in","r",stdin);
	freopen("classroom.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&cla[i]);	
	}	
	sort(cla+1,cla+n+1);
	fen(1,1e10);
	cout<<ans;
	return 0;
}

T3

单调队列板子

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 400000+5;
int n,m;ll h[N],dis[N],dis2[N];
int main()
{
	freopen("post.in","r",stdin);
	freopen("post.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&h[i]);	
	}	
	deque <ll> q;
	ll ans=0;
	for(int i=1;i<=n+1;i++)
	{
		while(!q.empty()&&h[q.back()]>h[i])
		{
			dis[q.back()]=i-q.back();
			q.pop_back();
		}
		q.push_back(i);
		
	}
	while(!q.empty())q.pop_back();
	for(int i=n;i>=0;i--)
	{
		while(!q.empty()&&h[q.back()]>h[i])
		{
			dis2[q.back()]=q.back()-i;
			q.pop_back();
		}
		q.push_back(i);
	}
	for(int i=1;i<=n;i++)
	{
//		cout<<dis[i]<<" "<<dis2[i]<<endl;
		ll you=i+(dis[i]-1);
		ll zuo=i-(dis2[i]-1);
		ans=max(ans,1ll*(you-zuo+1)*h[i]);
	}
	cout<<ans<<endl;
	return 0;
}
/*
6 
5 8 4 4 8 4
*/

T4

LCA板子,记得调用dfs_init函数

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+10;
int n,m,head[N],cnt;;bool vis[N];
struct Edge
{
	int from,to,w,next;
}edge[N*2];
int f[N][32];int dis[N],d[N];
void add(int u,int v,int w)
{
	edge[++cnt].from=u;
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	edge[cnt].w=w;
	head[u]=cnt;	
}
void test()
{
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<" ";
}
void dfs(int now,int fa)
{
	vis[now]=1;
	f[now][0]=fa;
	d[now]=d[fa]+1;
	for(int i=head[now];i;i=edge[i].next)
	{
		int to=edge[i].to;
		if(!vis[to])
		{
			dis[to]=dis[now]+edge[i].w;
			dfs(to,now);
		}
	}
}
void init()
{
	for(int j=1;j<32;j++)
	{
		for(int i=1;i<=n;i++)
		{
			f[i][j]=f[f[i][j-1]][j-1];
//			dis[i][j]=min(dis[i][j],dis[f[i][j-1]][j-1]);
		}
	}
}
int lca(int x,int y)
{
	if(d[x]<d[y])swap(x,y);
	for(int i=31;i>=0;i--)
	{
		if(d[f[x][i]]>=d[y])x=f[x][i];
	}
	if(x==y)return x;
//	for(int i=0;i<=31;i++)
	for(int i=31;i>=0;i--)
	{
		if(f[x][i]!=f[y][i])
		{
			x=f[x][i];
			y=f[y][i];
		}
	}
	return f[x][0];
}
main()
{
	freopen("meeting.in","r",stdin);
	freopen("meeting.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	int a,b,t;
	for(int i=1;i<=m;i++)
	{
		scanf("%lld%lld%lld",&a,&b,&t);
		add(a,b,t);add(b,a,t);
	}	
	for(int i=1;i<=n;i++)	
	{
		if(!vis[i])
		{
			dfs(i,0);	
		}
	}
	int q;
	scanf("%lld",&q);
	init();
	for(int i=1;i<=q;i++)
	{
		scanf("%lld%lld",&a,&b);
		int c=lca(a,b);
//			cout<<c<<endl;
		
		printf("%lld\n",dis[a]+dis[b]-2*dis[c]);
	}
	return 0;
}
/*
6 5
1 3 3
1 2 7
2 4 5
4 6 6
3 5 7
5
3 4
6 3
5 1
4 3
4 2
*/

标签:二调,int,一下,ll,back,long,edge,比赛,dis
From: https://www.cnblogs.com/wlesq/p/18106456

相关文章

  • “百度杯”CTF比赛 九月场-SQL
    “百度杯”CTF比赛九月场SQL:题目类型:web题目描述:出题人就告诉你这是个注入,有种别走!打开题目靶机在url栏上看到id=1,又根据提示说明这是一道SQL注入的题型:解题方法:这里我们知道是SQL注入之后,就可以开始进行注入了第一步:先判断它的注入类型我们看一下id=2是显示什么结果:我......
  • 【比赛】高一下二调
    板子题合集。唯一的难点在于没告诉我们要考试(悲)但是\(AK\)力(喜)T1交通管制题面最短路。正解应该是记录路径,然后将路径上每一条边\(\times\2\)后跑最短路,统计答案,极限复杂度\((O)\nlog(n)m\)但可以直接遍历所有的边,复杂度\((O)\n\log(n)\m\)(\(Dijkst......
  • debian12 linux root能用lightdm登陆xfce桌面,普通用户不能用lightdm登陆xfce桌面,闪
    Fn+Ctrl+F3,进入tty,发现登陆普通用户后再使用startxfce4可以直接进桌面下面参照https://forums.opensuse.org/t/normal-user-can-not-login/50756http://linux.it.net.cn/m/view.php?aid=6499有多种办法原因可能是用在自己账户下命令行sudostartx导致~/.Xauthority文件......
  • “百度杯”CTF比赛 九月场-Upload
    “百度杯”CTF比赛九月场Upload:类型:web题目描述:想怎么传就怎么传,就是这么任性。tips:flag在flag.php中解题方法:打开靶机,获得题目链接是一个文件上传类型的:看到文件上传,就想到一句话木马,先上传一个一句话木马上去:<?php@eval($_POST["1"]);?>上传成功,我们点击这个上传......
  • Kaggle量化比赛复盘: Optiver - Trading at the Close
    目录前言一、开源方案1.6th获奖方案(代码未开源)1.1.特征工程(关键代码)1.2.方案解析2. 7th获奖方案(开源)2.1.特征工程2.2.特征工程3. 9th获奖方案(半开源)3.1.特征构造3.2.特征筛选3.3.模型3.4.zero_sum(标签后处理)4. 14th获奖方案(开源)4.1.方案......
  • 转载:记录一下python setDaemon相关
    前言使用Python都不会错过线程这个知识,但是每次谈到线程,大家都下意识说GIL全局锁,但其实除了这个老生常谈的话题,还有很多有价值的东西可以探索的,譬如:setDaemon()。线程的使用与存在的问题我们会写这样的代码来启动多线程:importtimeimportthreadingdeftest():......
  • 强烈建议 | 想转行Python最好看一下这篇文章
    python现在非常火,语法简单而且功能强大,很多同学都想学Python!最近陆陆续续有很多小伙伴问我,学Python到底应该做什么,从事哪种岗位。下面是我们工作圈里面一些同学的苦恼:一、转行要趁早上面类似的问题还有很多,我请了一些不同岗位的嘉宾来给大家分享经验,下面谈谈我的感悟:......
  • 【前端面试题-19】简单说一下,如果前端页面要做个页面加载进度条,该通过哪些实现进度上
    前端页面要实现一个页面加载进度条,可以通过以下步骤进行进度上的把控:HTML结构:在页面中创建一个用于承载进度条的<div>元素或其他合适的元素,例如:<divid="progress-bar"><divid="progress"></div></div>progress-bar作为进度条的容器,progress则是实际表示进度的部......
  • 大一下第四周ACM实验课题解
    7-1ACM宣传作者杜祥军单位青岛大学LB大神想组织集训队去学校各处宣传ACM,但是大神不想让队员们走太多路,因此想写代码计算一下,到各地宣传再回到博知401的最短路径总和是多少。已知:学校一共有n个宣传点,博知401是标号为1的点。剩下n-1个点每个点各派1位队员,询问每个队员到达宣......
  • “百度杯”CTF比赛 2017 二月场-爆破-2
    “百度杯”CTF比赛2017二月场爆破-2类型:misc-web题目描述:flag不在变量中。解题方法:打开靶机,得到一段php源码:代码审计:1.里面包含了flag.php文件2.获取hello的值,并用var_dump函数输出相关的变量信息我们试着传入参数:?hello=$GLOBALS这里我们发现flag的信息并没有在变......